Spezifischer Widerstand

Dilay123

Mitglied
Hey Leute,

Ich muss halt einen Spezifischen Widerstand programmieren und ich will, dass bei meinem Programm wenn ich was falsch eingebe die Meldung kommt, dass es falsch ist und anschließend erneut gefragt wird was man eingeben will.
Ich würd sagen, dass ich es mit einer While-Schleife und Boolean Hilfsvariable machen muss, aber ich weiß nicht wirklich wie ich es da richtig einbauen sollte

Danke und LG :)

Hier mein Programm:

Java:
import java.util.Scanner;
public class SpezifischerWiderstand {
    
    public static void main(String[] args) {
        
        double r = 0; // Leitwiderstand
        double a = 0; // Querschnittsfläche
        double l = 0; // Länge des Leiters
        double p = 0; // spezifischer Widerstand Rho
        Boolean d=true;; //Hilfsvariable
        String stoff = "";
        Scanner scn = new Scanner(System.in);
        
  
        while (d=true)
            {
            try {
                System.out.println("Länge des Leiters angeben: ");
                l = scn.nextDouble();

                System.out.println("Querschnittsfläche angeben:");
                a = scn.nextDouble();

                System.out.println("Wählen Sie einen Stoff:\n(a)Aluminium\n(b)Eisen\n(c)Gold\n(d)Kupfer\n(e)Silber");
                stoff = scn.next();

                switch (stoff) {
                                case "a":
                                        System.out.println("a)Aluminium");
                                        System.out.println("0,028\n");
                                        p = 0.028;
                                        break;
                                case "b":
                                        System.out.println("b)Eisen:");
                                        System.out.println("0,097\n");
                                        p = 0.097;
                                        break;
                                case "c":
                                        System.out.println("c)Gold:");
                                        System.out.println("0,023\n");
                                        p = 0.023;
                                        break;
                                case "d":
                                        System.out.println("d)Kupfer:");
                                        System.out.println("0,017\n");
                                        p = 0.017;
                                        break;
                                case "e":
                                        System.out.println("e)Silber:");
                                        System.out.println("0,016\n");
                                        p = 0.016;
                                        break;
                                
                
                
                                }
                                d=true;
                                r=(p*l/a);
                                System.out.println("R="+r);
                                }catch (Exception e)
        
                                {
                                    System.out.println("Fehler! Bitte gibs erneut ein:");
                                }
                                scn.close();
                                }

                            }
                    }
.
 

MoxxiManagarm

Top Contributor
Boolean d=true;; //Hilfsvariable
Bitte verwende boolean und nicht die Boolean Wrapper Klasse.
Bist du dir sicher, dass du hier true zuweisen willst?
Eine Resource, welche System.in verwendet sollte nicht geschlossen werden. Und wenn überhaupt, empfehle ich auch immer das AutoCloseable Interface zu verwenden.
a = scn.nextDouble(); /* ... */ stoff = scn.next();
Du kannst nicht einfach einen String nach einem double einlesen mit dem Scanner. Entweder du verwendest immer next() und parsed im Fall von double selbst oder du fügst ein dummy next() (ist leer) dazwischen ein.
 
K

kneitzel

Gast
Du kannst nicht einfach einen String nach einem double einlesen mit dem Scanner. Entweder du verwendest immer next() und parsed im Fall von double selbst oder du fügst ein dummy next() (ist leer) dazwischen ein.
Wie kommst Du auf diese Idee? next und nextDouble nutzen beide Tokens (wenn man das so ausdrücken will) und die harmonisieren gut.

Das Problem tritt nur auf, wenn man nextLine auch noch dazwischen mengt.

Also einfaches Beispiel für Tests:
Java:
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (true) {
            System.out.print("Double eingeben: ");
            System.out.println("Eingegeben: " + in.nextDouble());
            System.out.print("Token eingeben: ");
            System.out.println("Eingegeben: " + in.next());
        }
    }

Und dann die Ausgabe mit den jeweiligen Eingaben - immer schön ein Token nach dem anderen:

Double eingeben: 1
Eingegeben: 1.0
Token eingeben: asd
Eingegeben: asd
Double eingeben: 2
Eingegeben: 2.0
Token eingeben: dfg
Eingegeben: dfg

Natürlich kann man dann auch trixen:
Double eingeben: 1 asd 2 bcd
Eingegeben: 1.0
Token eingeben: Eingegeben: asd
Double eingeben: Eingegeben: 2.0
Token eingeben: Eingegeben: bcd

==> Es wurden gleich 4 Token eingegeben und daher musste nicht noch mehr eingegeben werden....
 

Ähnliche Java Themen

Neue Themen


Oben