Switch in Java - Anfänger?
Hallöchen,
ich bin neu bei Java und treffe auf diesen Fehler.
Wie kann das verbessert werden?
2 Antworten
- Die Verwendung von "case x < -1" und "case -1 <= x <= 1" ist inkorrekt. Ein switch-Statement sollte mit konstanten Ausdrücken arbeiten, d.h. Ausdrücken, die zur Übersetzungszeit ausgewertet werden können. Die Ausdrücke "x < -1" und "-1 <= x <= 1" können jedoch erst zur Laufzeit ausgewertet werden und können daher nicht in einem switch-Statement verwendet werden.
- Es gibt einen doppelten Fall mit "case 1 < x". Dies kann zu unerwartetem Verhalten führen, da der Fall in Zeile 4 bereits alle Werte von x behandelt, die größer als 1 sind. Daher wird der Fall in Zeile 5 niemals ausgeführt.
- Es gibt keine "break;"-Anweisungen innerhalb des switch-Statements. Wenn ein Fall ausgeführt wird, wird das Programm fortgesetzt und alle folgenden Fälle werden ebenfalls ausgeführt, es sei denn, es wird eine "break;"-Anweisung verwendet.
Ich empfehle, den Code mit einem if-else-Statement lösen:
java
if (x < -1) {
System.out.println("f(x) = x+2");
} else if (x >= -1 && x <= 1) {
System.out.println("f(x) = 1");
} else if (x > 1) {
System.out.println("f(x) = x");
} else {
System.out.println("Nicht berechenbar");
}
Wenn du aber explizit ein switch case möchtest/brauchst könnte man es so machen:
switch (x) {
case -2:
case -3:
case -4:
System.out.println("f(x) = x+2");
break;
case -1:
case 0:
case 1:
System.out.println("f(x) = 1");
break;
default:
if (x > 1) {
System.out.println("f(x) = x");
} else {
System.out.println("Nicht berechenbar");
}
}
Beachte, dass nach jedem Teil ein break; stehen sollte, da sonst nicht nach einem zutreffenden case gestoppt wird.
Bei der case-Anweisung darf nur eine Konstante stehen - und keine Bedingung.
Sieh dir einmal dieses Beispiel an:
https://www.w3schools.com/java/ref_keyword_case.asp
Außerdem willst du vermutlich am Ende jedes Abschnittes ein break-Statement haben, denn sonst macht er nach dessen Ausführung mit dem nächsten case weiter.
Deine geschlungenen Klammern in jedem case-Abschnitt sind hingegen überflüssig (schaden aber auch nicht).