Switch in Java - Anfänger?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
  1. 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.
  2. 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.
  3. 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.

Woher ich das weiß:Studium / Ausbildung

ZweifelHase 
Fragesteller
 27.03.2023, 21:36

Vielen Dank!

1

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).


ZweifelHase 
Fragesteller
 27.03.2023, 21:36

Alles klar, danke!

0