Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe folgendes Problem, und zwar möchte ich eine Abfrage machen und bei einer ungültigen Eingabe soll die Schleife das ganze nochmal abfragen. Der Code sieht so aus:
String eingabeNeu = scanner.next();
switch(eingabeNeu){
case "Ja": System.out.println("Der Gesamtflächeninhalt beträgt: " +(a+b) +" m²"); break;
case "Nein": System.out.println("Flächeninhalt wird nicht ausgegeben"); break;
default: System.out.println("Ungültige Eingabe, versuchen Sie es erneut");
}
Bisher funktionieren alle Fälle. Nun soll aber bei "Ungültiger Eingabe,..." das ganze von vorne anfangen, weil die Eingabe entweder Ja oder Nein sein soll. Deswegen hatte ich das break eingebaut.
Ich kann mir vorstellen, dass default einfach dann ausgeführt wird, wenn kein case zutrifft. Allerdings endet dann ja somit auch die Schleife. Dafür müsste ich ja jetzt nun einen case haben, der alle anderen Fälle abdeckt?
Auf welchem comparator setzt ein Switch mit Strings denn auf? Finde das irgendwie befremdlich da man ja nicht weiß ob es ein equal oder ein == oder was auch immer ist das da getestet wird.
Hallo,
Strings in switch Statements ist etwas neumodisch, siehe auch: http://stackoverflow.com/questions/338206/why-cant-i-switch-on-a-string
---
1.) In default wird eine Variable done NICHT gesetzt, eine Schleife wiederholt die Eingabe
2.) In default wird NICHT mit break aBreakpoint; eine Schleife verlassen
3.) Eine Methode gibt zurück, ob eine Schleife die Eingabe wiederholt
---
BufferedReader statt Scanner einsetzen zu bevorzugen
---
Eingabe darf deutsch sein, aber Variablennamen sollten alle lowerCamelCase Englisch sein
---
Flächeninhalt kenne ich nur a*b , macht's etwas aus, wenn du das komplette postest, so kann ich das vielleicht "verbessern"
Das habe ich lediglich mal zum üben geschrieben, frag also bitte nicht nach dem "Sinn"
Ich wollte mal ein wenig mit Klassen und Objekterzeugung rumversuchen. Wie du siehst, bin ich ein blutiger Anfänger, daher würde ich eine eher "unschöne", aber für mich verständliche Lösung begrüßen.
Die Operation zum Schluss soll eben abfragen, ob der gesamte Flächeninhalt ausgegeben werden soll. Eingabemöglichkeit soll Ja oder Nein sein und bei falscher Eingabe (bspw. 1 oder neein) soll erneut gefragt werden (Ungültige Eingabe, versuchen Sie es erneut).
Vielen Dank!
Java:
public static void main(String[] args) {
Rechteck Rechteck1 = new Rechteck();
Kreis Kreis1 = new Kreis();
Scanner scanner = new Scanner(System.in);
Rechteck1.setSeite1();
Rechteck1.setSeite2();
double a = Rechteck1.getFlaeche();
System.out.println("Die Fläche des Rechtecks beträgt: " + a + " m²");
Kreis1.setRadius();
double b = Kreis1.getFlaeche();
System.out.println("Die Fläche des Kreises beträgt: " + b + " m²");
System.out.println("Möchten Sie noch den gesamten Flächeninhalt wissen?");
String eingabeNeu = scanner.next();
switch(eingabeNeu){
case "Ja": System.out.println("Der Gesamtflächeninhalt beträgt: " +(a+b) +" m²"); break;
case "Nein": System.out.println("Flächeninhalt wird nicht ausgegeben"); break;
default: System.out.println("Ungültige Eingabe, versuchen Sie es erneut");
}
scanner.close();
}
}
Danke @DerWissende!
Im oberen Teil sind doch schon einige Ausdrücke, die ich so noch nie gesehen habe. Der Teil ab String a ist aber für mich verständlich. Ich werde das gleich mal ausprobieren!
Das ich überall 4.0d und 2.0d reingeschrieben hab, war irgendwie unprofessionell von mir:
Java:
/**
* Calcs some things ....
*
* @param args images a, b, and c.
* @throws java.io.IOException
*/
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Nen Kreis(1) oder Quadrat(2)?:");
int o = Integer.parseInt(in.readLine());
if (o != 2) {
System.out.println("Durchmesser, bitte:");
double d = Double.parseDouble(in.readLine());
System.out.println("Radius: " + d / 2);
System.out.println("Umfang: " + Math.PI * d);
System.out.println("Fläche: " + Math.PI * d * d / 4);
} else {
System.out.println("Seitenlänge, bitte:");
double d = Double.parseDouble(in.readLine());
String a;
do {
System.out.println("Gib jetzt Ja oder Nein ein:");
a = in.readLine().trim();
} while (!a.equalsIgnoreCase("ja") && !a.equalsIgnoreCase("nein"));
if (a.equalsIgnoreCase("ja")) {
System.out.println("Umfang: " + 4 * d);
System.out.println("Fläche: " + d * d);
System.out.println("Diagonale: " + Math.sqrt(2) * d);
} else {
System.out.println("Tschüss!");
}
}
}
Code:
Nen Kreis(1) oder Quadrat(2)?:
1
Durchmesser, bitte:
5
Radius: 2.5
Umfang: 15.707963267948966
Fläche: 19.634954084936208
Nen Kreis(1) oder Quadrat(2)?:
2
Seitenlänge, bitte:
5
Gib jetzt Ja oder Nein ein:
ja
Umfang: 20.0
Fläche: 25.0
Diagonale: 7.0710678118654755
Du siehst, diese Operationen sind schon furchtbar genau, generell gilt, dass * und / die Genauigkeit (***) nicht verschlechtern oder sogar erhöhen.
***: Okay, einige Ausnahmen gibt es natürlich, aber da geht's ins Eingemachte
Naja, was ich sagen wollte, es kommt auf die Terme an, wie man sie wählt, bei so etwas.
Solange das Mobil jetzt nicht punktgenau auf dem Mars landen soll, ist erst mal alles Ok.
Es geht auch etwas anders, einige Möglichkeiten hab ich ja schon oben umrissen, hinzu noch:
Java:
String a;
for (;;) {
System.out.println("Gib jetzt Ja oder Nein ein:");
a = in.readLine().trim();
if (a.equalsIgnoreCase("ja") || a.equalsIgnoreCase("nein")) {
break;
} else {
continue;
}
}
Code:
Nen Kreis(1) oder Quadrat(2)?:
2
Seitenlänge, bitte:
5
Gib jetzt Ja oder Nein ein:
Gib jetzt Ja oder Nein ein:
hallo
Gib jetzt Ja oder Nein ein:
ich weiß nicht
Gib jetzt Ja oder Nein ein:
gut
Gib jetzt Ja oder Nein ein:
tschüss
Gib jetzt Ja oder Nein ein:
nein
Tschüss!
Viele vermeiden das aber - statt for... auch while (true) {, statt break; auch // mache was.... und dann break;, statt if ( auch eine extra Methode...