1. Grundsyntax von verschachteltem if
Im echten Leben gibt's selten Situationen, wo eine Entscheidung nur nach einem Kriterium getroffen wird. Meistens muss man gleich mehrere Bedingungen prüfen, und die hängen oft voneinander ab. Zum Beispiel: Um auf ein Konzert zu kommen, reicht es nicht einfach erwachsen zu sein – manchmal muss man auch auf der Gästeliste stehen. Genau hier kommt die sogenannte mehrstufige Logik ins Spiel, und dabei helfen uns verschachtelte if-Anweisungen.
Verschachtelte Bedingungen – das ist, wenn ein if im Inneren eines anderen lebt. Stell dir eine Box in einer Box vor: Wenn die erste Box aufgeht (Bedingung erfüllt), schauen wir, was drin ist und öffnen vielleicht die zweite. Aus Sicht von Code und Logik ist das ein ziemlich mächtiges Tool.
Fangen wir mal einfach an:
if (bedingungA)
{
// Aktionen, wenn bedingungA — true (wahr)
if (bedingungB)
{
// Aktionen, wenn beide Bedingungen wahr sind
}
}
Wenn dich das an eine Matroschka erinnert – dann hast du's richtig verstanden! Das innere if wird nur ausgeführt, wenn das äußere zutrifft.
Beispiel: Einlass in den Club
Lass uns unsere Lern-App weiterentwickeln, wo der User vorher Name und Alter eingegeben hat. Jetzt bauen wir eine zweite Prüfstufe ein: Um in einen exklusiven Club zu kommen, muss man älter als 21 sein und einen Einladungscode haben.
Console.Write("Gib deinen Namen ein: ");
string name = Console.ReadLine();
Console.Write("Gib dein Alter ein: ");
int age = int.Parse(Console.ReadLine());
if (age >= 21)
{
Console.Write("Gib den Einladungscode ein: ");
string code = Console.ReadLine();
if (code == "VIP2024")
{
Console.WriteLine("Willkommen, " + name + ", im VIP-Club!");
}
else
{
Console.WriteLine("Sorry, falscher Code. Zugang verweigert.");
}
}
else
{
Console.WriteLine("Sorry, Eintritt erst ab 21!");
}
Achte drauf: Das innere if prüft den Code nur, wenn das Alter schon passt. Das spart Ressourcen (und nervt den Türsteher nicht).
2. Wie viele Verschachtelungsebenen sind okay?
Technisch gesehen: so viele du willst. Aber in der Praxis – je mehr Ebenen, desto schwerer wird der Code zu lesen und zu pflegen. Meistens nutzt man selten mehr als 2-3 Ebenen. Wenn du „Leitern“ mit 4 oder mehr verschachtelten ifs baust, solltest du überlegen: Vielleicht kann man die Logik vereinfachen oder Teile in eigene Funktionen auslagern (das ist aber ein Thema für eine andere Vorlesung!).
3. Verschachtelte ifs und else: Fallen und Feinheiten
Anfängerfehler: Nachlässiger Umgang mit geschweiften Klammern.
Wenn du verschachtelte Bedingungen schreibst, besonders mit else, ist C# beim Syntax sehr streng. Wenn du keine geschweiften Klammern {} setzt, gilt das if oder else nur für die erste Zeile danach. Das ist eine häufige Quelle für nervige Bugs.
Beispiel mit möglichem Fehler:
if (age >= 21)
if (code == "VIP2024")
Console.WriteLine("Willkommen!");
else
Console.WriteLine("Falscher Code.");
Viele denken, dass das else zur Altersprüfung gehört, aber tatsächlich bezieht es sich auf das nächste if davor (die Prüfung des Einladungscodes). Dadurch werden die Nachrichten vielleicht nicht so angezeigt, wie du es erwartest. Besser immer Klammern setzen – auch wenn nur eine Zeile drinsteht!
Damit es keine Missverständnisse gibt, zeig ich's nochmal. Der Compiler sieht den Code oben so:
if (age >= 21)
{
if (code == "VIP2024")
Console.WriteLine("Willkommen!");
else
Console.WriteLine("Falscher Code.");
}
Wichtig! Noch mal:
Wenn bei if-else-Konstruktionen keine geschweiften Klammern gesetzt sind, bezieht sich das else immer auf das vorherige (nächste) if.
4. Alternativen: else if in verschachtelten Bedingungen
Manchmal willst du im äußeren if nicht nur eine zusätzliche Bedingung prüfen, sondern auch eine Alternative anbieten. Zum Beispiel: Wenn der Einladungscode nicht passt, kann man ein Ticket kaufen. Das geht mit einer verschachtelten else if/else-Konstruktion:
if (age >= 21)
{
Console.Write("Gib den Einladungscode ein: ");
string code = Console.ReadLine();
if (code == "VIP2024")
{
Console.WriteLine("Willkommen im Club!");
}
else if (code == "GUEST")
{
Console.WriteLine("Gastmodus: Zugang nur bis 23:00.");
}
else
{
Console.WriteLine("Sorry, Zugang nicht möglich.");
}
}
else
{
Console.WriteLine("Eintritt erst ab 21.");
}
In diesem Beispiel haben wir eine verschachtelte Auswahl zwischen drei Szenarien: VIP-Code, Gast-Code und Ablehnung.
5. Praxis: Rabatt-Rechner mit mehrstufiger Logik
Lass uns so eine App schreiben: Der User bekommt im Shop Rabatt je nach Alter und ob er eine Clubkarte hat.
- Wenn das Alter des Users größer oder gleich 60 ist – Rabatt 15%.
- Wenn das Alter kleiner ist, aber der User eine Clubkarte hat – Rabatt 7%.
- In allen anderen Fällen gibt's keinen Rabatt.
Wie sieht das im Code aus?
Console.Write("Gib dein Alter ein: ");
int age = int.Parse(Console.ReadLine());
double discount = 0.0;
if (age >= 60)
{
discount = 0.15;
}
else
{
Console.Write("Hast du eine Clubkarte (ja/nein)? ");
string hasCard = Console.ReadLine();
if (hasCard == "ja")
{
discount = 0.07;
}
}
Console.WriteLine("Dein Rabatt: " + (discount * 100) + "%");
Hier haben wir ein verschachteltes if im else-Zweig benutzt. Wenn das Alter nicht passt, fragen wir erst dann nach der Karte.
GO TO FULL VERSION