CodeGym /Kurse /JAVA 25 SELF /Verschachtelte if, mehrstufige Logik

Verschachtelte if, mehrstufige Logik

JAVA 25 SELF
Level 3 , Lektion 2
Verfügbar

1. Grundsyntax eines verschachtelten if

Im wirklichen Leben trifft man selten eine Situation, in der eine Entscheidung nur nach einem einzigen Kriterium getroffen wird. In der Regel müssen mehrere Bedingungen gleichzeitig geprüft werden, und sie hängen oft voneinander ab. Zum Beispiel reicht es für den Einlass zu einem Konzert nicht, einfach nur volljährig zu sein – manchmal muss man außerdem auf der Gästeliste stehen. Hier kommt die sogenannte mehrstufige Logik ins Spiel, und dabei helfen uns verschachtelte if-Anweisungen.

Verschachtelte Bedingungen bedeuten, dass ein if innerhalb eines anderen lebt. Stellen Sie sich eine Schachtel in der Schachtel vor: Wenn die äußere Bedingung erfüllt ist, wird erst dann die innere geprüft. Das ist ein mächtiges Werkzeug zur Steuerung des Programmflusses.

Fangen wir mit etwas Einfachem an:

if (uslovieA)
{
    // Aktionen, wenn uslovieA true (wahr) ist
    if (uslovieB)
    {
        // Aktionen, wenn beide Bedingungen wahr sind
    }
}
Ein verschachteltes if innerhalb eines anderen if

Wenn Sie das an eine Matrjoschka erinnert – Sie liegen richtig! Das innere if wird nur ausgeführt, wenn das äußere gegriffen hat.

Beispiel: Einlass in den Club

Lassen Sie uns unsere Beispielanwendung weiterentwickeln, in der der Benutzer zuvor Name und Alter eingegeben hat. Jetzt fügen wir eine zweite Prüfebene hinzu: Nehmen wir an, um in einen geschlossenen Club zu kommen, muss man älter als 21 sein und einen Einladungscode haben.

System.out.print("Geben Sie Ihren Namen ein: ");
String name = console.nextLine();

System.out.print("Geben Sie Ihr Alter ein: ");
int age = console.nextInt();

if (age >= 21)
{
    System.out.print("Geben Sie den Einladungscode ein: ");
    String code = console.nextLine();

    if (code.equals("VIP2024"))
    {
        System.out.println("Willkommen, " + name + ", im VIP-Club!");
    }
    else
    {
        System.out.println("Entschuldigung, falscher Code. Zugriff verweigert.");
    }
}
else
{
    System.out.println("Entschuldigung, Zutritt erst ab 21!");
}

Beachten Sie: Das innere if prüft den Code nur, wenn das Alter bereits geprüft wurde. Das spart Ressourcen (und die Nerven des Türstehers).

2. Wie viele Verschachtelungsebenen sind zulässig?

Technisch gesehen – beliebig viele. In der Praxis gilt jedoch: Je mehr verschachtelte Ebenen, desto schwieriger sind Code-Lesbarkeit und -Wartung. Üblicherweise beschränkt man sich auf 23 Ebenen. Wenn eine „Treppe“ aus 4+ verschachtelten if entsteht, überlegen Sie, ob sich die Logik vereinfachen oder Prüfungen in Methoden auslagern lassen.

Verschachtelte Logik: Visualisierung

3. Verschachtelte if und else: Fallen und Feinheiten

Anfängerfehler: nachlässiger Umgang mit geschweiften Klammern.

In Java gilt bei der Verwendung von else eine strikte Regel: Ohne geschweifte Klammern {} gehört zu einem if oder else nur die erste Anweisung danach. Das ist eine häufige Quelle ärgerlicher Bugs.

Beispiel mit potenziellem Fehler:

if (age >= 21)
    if (code.equals("VIP2024"))
        System.out.println("Willkommen!");
else
    System.out.println("Falscher Code.");

Viele erwarten, dass sich das else auf die Altersprüfung bezieht, tatsächlich bezieht es sich jedoch auf das ihm nächste vorherige if (die Prüfung des Einladungscodes). Deshalb können Ausgaben anders erscheinen als erwartet. Verwenden Sie besser immer Klammern – selbst wenn innen nur eine einzige Zeile steht!

Damit es keine Missverständnisse gibt, der Compiler „sieht“ diesen Code so:

if (age >= 21)
{    
    if (code.equals("VIP2024"))
        System.out.println("Willkommen!");
else
    System.out.println("Falscher Code.");
}    

Wichtig! Noch einmal: Wenn in einer if-else-Konstruktion keine geschweiften Klammern gesetzt sind, bezieht sich else auf das vorherige (ihm nächststehende) if.

4. Alternativen: else if in verschachtelten Bedingungen

Manchmal möchte man innerhalb des äußeren if nicht nur eine zusätzliche Bedingung prüfen, sondern auch eine Alternative vorsehen. Zum Beispiel: Wenn der Einladungscode nicht passt, kann man Gastzugang anbieten oder den Zugang verweigern.

if (age >= 21)
{
    System.out.print("Geben Sie den Einladungscode ein: ");
    String code = console.nextLine();

    if (code.equals("VIP2024"))
    {
        System.out.println("Willkommen im Club!");
    }
    else if (code.equals("GUEST"))
    {
        System.out.println("Gästemodus: Zugang nur bis 23:00 Uhr.");
    }
    else
    {
        System.out.println("Leider ist kein Zugang möglich.");
    }
}
else
{
    System.out.println("Zutritt erst ab 21.");
}

Hier treffen wir innerhalb der äußeren Verzweigung eine verschachtelte Auswahl zwischen drei Szenarien: VIP-Code, Gastcode und Ablehnung.

5. Praxis: Rabattrechner mit mehrstufiger Logik

Angenommen, dem Nutzer wird ein Rabatt auf Basis des Alters und des Besitzes einer Clubkarte gewährt.

  • Wenn das Alter des Nutzers größer oder gleich 60 ist – Rabatt 15 %.
  • Wenn das Alter geringer ist, der Nutzer aber eine Clubkarte hat – Rabatt 7 %.
  • In allen anderen Fällen gibt es keinen Rabatt.

Wie setzt man das um?

System.out.print("Geben Sie Ihr Alter ein: ");
int age = console.nextInt();

double discount = 0.0;

if (age >= 60)
{
    discount = 0.15;
}
else
{
    System.out.print("Haben Sie eine Clubkarte (ja/nein)? ");
    String hasCard = console.nextLine();

    if (hasCard.equals("ja"))
    {
        discount = 0.07;
    }
}

System.out.println("Ihr Rabatt: " + (discount * 100) + "%");

Hier haben wir ein verschachteltes if im else-Zweig verwendet: Wenn das Alter nicht ausreicht, fragen wir erst dann nach der Karte.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION