EMZETT.
Login

Kurz: Die Bedingung muss ein boolean sein (anders als in C oder JavaScript gibt es kein “truthy”). Setze immer geschweifte Klammern.

Teil des Kurses Java

Kapitel 6 von 22 im Kurs Java (Abschnitt „Programmablauf“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

if, else if, else

public class Note {
    public static void main(String[] args) {
        int punkte = 73;
        if (punkte >= 90) {
            System.out.println("sehr gut");
        } else if (punkte >= 75) {
            System.out.println("gut");
        } else if (punkte >= 50) {
            System.out.println("bestanden");
        } else {
            System.out.println("nicht bestanden");
        }
    }
}

Ausgabe:

bestanden

Die Bedingung muss ein boolean sein (anders als in C oder JavaScript gibt es kein “truthy”). Setze immer geschweifte Klammern.

switch (klassisch)

public class Wochentag {
    public static void main(String[] args) {
        int tag = 6;
        switch (tag) {
            case 1:
                System.out.println("Montag");
                break;
            case 6:
            case 7:
                System.out.println("Wochenende");
                break;
            default:
                System.out.println("Werktag");
        }
    }
}

Ausgabe:

Wochenende

Ohne break läuft der Code in den nächsten Fall weiter (Fall-through).

switch-Ausdruck (modern)

Seit Java 14 gibt es die kompakte Form mit ->. Sie hat kein Fall-through, liefert einen Wert und muss vollständig sein:

public class Modern {
    enum Farbe { ROT, GELB, GRUEN }
 
    public static void main(String[] args) {
        int tag = 3;
        String name = switch (tag) {
            case 1 -> "Montag";
            case 2 -> "Dienstag";
            case 3 -> "Mittwoch";
            case 6, 7 -> "Wochenende";
            default -> "anderer Tag";
        };
        System.out.println(name);
 
        Farbe f = Farbe.GELB;
        int dauer = switch (f) {
            case ROT -> 30;
            case GELB -> {
                int zwischen = 3;
                yield zwischen * 2;                   // bei Blöcken: yield liefert den Wert
            }
            case GRUEN -> 20;
        };
        System.out.println(dauer);
 
        String text = "ja";
        boolean ok = switch (text) {
            case "ja", "yes", "ok" -> true;
            default -> false;
        };
        System.out.println(ok);
    }
}

Ausgabe:

Mittwoch
6
true

Bei enum und sealed-Typen prüft der Compiler, dass alle Fälle behandelt sind.

Pattern Matching im switch

public class Muster {
    record Kreis(double r) {}
    record Rechteck(double b, double h) {}
 
    static double flaeche(Object form) {
        return switch (form) {
            case Kreis k -> Math.PI * k.r() * k.r();
            case Rechteck(double b, double h) -> b * h;       // Record-Pattern: gleich zerlegen
            case null -> 0;
            default -> throw new IllegalArgumentException("Unbekannt: " + form);
        };
    }
 
    public static void main(String[] args) {
        System.out.printf("%.2f %.1f%n", flaeche(new Kreis(1)), flaeche(new Rechteck(3, 4)));
    }
}

Ausgabe:

3.14 12.0

Verschachtelte Bedingungen vermeiden

public class Frueh {
    static String preis(int alter) {
        if (alter < 0) return "ungültig";
        if (alter < 6) return "frei";
        if (alter < 18) return "5 EUR";
        return "10 EUR";
    }
    public static void main(String[] args) {
        System.out.println(preis(-1) + " " + preis(4) + " " + preis(12) + " " + preis(40));
    }
}

Ausgabe:

ungültig frei 5 EUR 10 EUR

Frühes return hält den Code flach und gut lesbar.

Merke

  • if-Bedingungen müssen boolean sein; immer { } setzen
  • Klassisches switch braucht break; der moderne Ausdruck mit -> nicht
  • switch kann einen Wert liefern, mit yield in Blöcken
  • Pattern Matching zerlegt Typen und Records direkt im switch
  • Früh zurückgeben statt tief verschachteln

Übungsaufgabe

Schreibe eine Methode monatsTage(int monat, boolean schaltjahr) mit einem switch-Ausdruck.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Strings und Text

Weiter: Schleifen

Alle Kapitel: Java im Überblick