Schritt 10 – Eine echte Fallunterscheidung
Bisher haben wir bereits mehrfach mit if-Anweisungen gearbeitet. Dabei wurde jedoch immer nur geprüft, ob eine bestimmte Bedingung erfüllt ist. War dies der Fall, wurde eine Anweisung ausgeführt. Andernfalls geschah nichts.
Einseitige Auswahl
Eine einfache if-Anweisung führt zu einer einseitigen Auswahl. Ist die Bedingung erfüllt, wird eine zusätzliche Anweisung ausgeführt. Ist sie nicht erfüllt, setzt das Programm seinen normalen Ablauf unverändert fort.
Beispiel
public void demo(double gewicht)
{
if (gewicht < 30)
gewicht = 30;
System.out.println(gewicht);
}
Ist der Wert von gewicht kleiner als 30, wird er zunächst auf 30 gesetzt. Anschließend wird der Wert ausgegeben.
Ist die Bedingung dagegen nicht erfüllt, wird diese Zuweisung übersprungen und der Wert sofort ausgegeben.
Programmfluss des obigen Beispiels
Autor: Ulrich Helmich, 07/2026, Lizenz: Public Domain
Das Flussdiagramm zeigt den Programmablauf. Der normale Ablauf ist grün dargestellt. Nur wenn die Bedingung erfüllt ist, wird der rote Umweg durchlaufen.
Zweiseitige Auswahl
Häufig reicht eine einseitige Auswahl nicht aus. Stattdessen soll das Programm zwischen zwei Alternativen wählen.
1 if (gewicht < getIdealgewicht())
2 System.out.println("Sie sind zu leicht");
3 else
4 System.out.println("Sie sind nicht zu leicht");
Hier wird immer genau eine der beiden Ausgaben ausgeführt:
- Ist die Bedingung erfüllt, erscheint „Sie sind zu leicht“.
- Andernfalls erscheint „Sie sind nicht zu leicht“.
Im Gegensatz zur einfachen if-Anweisung gibt es hier also zwei gleichberechtigte Alternativen. Eine solche Konstruktion bezeichnet man in der Informatik als zweiseitige Auswahl.
Programmfluss der zweiseitigen Auswahl
Autor: Ulrich Helmich, 07/2026, Lizenz: Public Domain
Hier sehen wir das Flussdiagramm zu dieser zweiseitigen Auswahl.
Aufgabe 3.4-1
Begründen Sie, wieso die Anweisung im else-Zweig des obigen Beispiels nicht
System.out.println("Sie sind zu schwer");
heißen darf!
Die Mehrfachauswahl in Java
Oft will man nicht nur zwischen zwei verschiedenen Fällen unterscheiden, sondern beispielsweise zwischen drei Fällen:
- "Sie sind zu leicht"
- "Sie sind zu schwer"
- "Perfekt"
Die if-else-Anweisung ermöglicht zunächst nur eine Zweifachauswahl: Entweder ist die Bedingung erfüllt oder sie ist nicht erfüllt. Wie kann man in Java trotzdem eine Dreifachauswahl realisieren?
Schauen Sie sich dazu das folgende Flussdiagramm an:
Programmfluss einer Dreifachauswahl
Autor: Ulrich Helmich, 07/2026, Lizenz: Public Domain
Aufgabe 3.4-2
Erläutern Sie dieses Flussdiagramm und begründen Sie, wieso es eine Dreifachauswahl realisiert!
Aufgabe 3.4-3
Zeichnen Sie ein Flussdiagramm, das eine Fünffachauswahl ermöglicht:
- „Sie sind viel zu leicht“
- „Sie sind zu leicht“
- „Perfekt“
- „Sie sind zu schwer“
- „Sie sind viel zu schwer“
Probleme bei Mehrfachauswahlen
Wir wollen die Fünffachauswahl aus Aufgabe 3.4-3 nun implementieren. Ein erster Implementierungsversuch könnte folgendermaßen aussehen:
if (gewicht < getIdealgewicht()) // 1
System.out.println("Sie sind zu leicht");
else if (gewicht < getIdealgewicht() * 0.8) // 2
System.out.println("Sie sind viel zu leicht");
else if (gewicht > getIdealgewicht()) // 3
System.out.println("Sie sind zu schwer");
else if (gewicht > getIdealgewicht() * 1.2) // 4
System.out.println("Sie sind viel zu schwer");
else
System.out.println("Perfekt"); // 5
Spielen wir nun einige Fallbeispiele durch, um zu überprüfen, ob dieser erste Vorschlag korrekt arbeitet.
Fallbeispiel 1:
Das Gewicht der Person liegt deutlich unter dem Idealgewicht.
Dann ist bereits die erste Bedingung erfüllt, sodass in der Konsole „Sie sind zu leicht“ ausgegeben wird. Das Ergebnis ist jedoch falsch, denn bei einem deutlich zu niedrigen Gewicht müsste „Sie sind viel zu leicht“ erscheinen.
Die zweite Bedingung, die in diesem Fall ebenfalls zutreffen würde, wird jedoch nicht mehr überprüft. Sobald eine Bedingung einer if-else-if-Kette erfüllt ist, werden alle nachfolgenden Bedingungen übersprungen.
Fallbeispiel 2:
Das Gewicht der Person liegt deutlich über dem Idealgewicht.
Die ersten beiden Bedingungen sind nicht erfüllt, die dritte Bedingung dagegen schon. Deshalb wird „Sie sind zu schwer“ ausgegeben. Richtig wäre jedoch „Sie sind viel zu schwer“. Die vierte Bedingung wird nicht mehr überprüft, weil nach einer bereits erfüllten Bedingung alle weiteren else if-Zweige übersprungen werden.
Fallbeispiel 3:
Das Gewicht der Person liegt geringfügig über dem Idealgewicht.
Die ersten beiden Bedingungen sind nicht erfüllt, die dritte Bedingung dagegen schon. Deshalb wird „Sie sind zu schwer“ ausgegeben. In diesem Fall arbeitet die Mehrfachauswahl korrekt.
Merke:
Mehrfachauswahlen mit if-else-if-Ketten
Bei einer if-else-if-Kette werden die Bedingungen von oben nach unten überprüft. Sobald eine Bedingung erfüllt ist, wird ihr Anweisungsblock ausgeführt; alle nachfolgenden Bedingungen werden nicht mehr geprüft. Deshalb müssen speziellere Bedingungen immer vor allgemeineren Bedingungen stehen.
Diese wichtige Erkenntnis werden wir in den folgenden Übungen vertiefen.
Weitere Aufgaben und Übungen
Aufgabe 3.4-4
Betrachten Sie folgende Dreifachauswahl:
if (gewicht < getIdealgewicht())
System.out.println("Sie sind zu leicht");
else if (gewicht > getIdealgewicht())
System.out.println("Sie sind zu schwer");
else if (gewicht == getIdealgewicht())
System.out.println("Sie haben Idealgewicht");
1. Begründen Sie, warum diese Implementierung nicht optimal ist.
2. Schreiben Sie eine bessere Version!
Aufgabe 3.4-5
Begründen Sie, wieso die Methode rateMal() nicht korrekt arbeitet.
public void rateMal(int rate)
{
if (rate < 3)
System.out.println("viel zu klein");
else if (rate < 8)
System.out.println("zu klein");
else if (rate < 13)
System.out.println("zu klein, aber fast richtig");
else if (rate == 13)
System.out.println("genau richtig");
else if (rate > 13)
System.out.println("etwas zu groß, aber fast richtig");
else if (rate > 18)
System.out.println("zu groß");
else if (rate > 23)
System.out.println("viel zu groß");
}
Aufgabe 3.4-6
Betrachten Sie folgende komplexere geschachtelte if-Anweisung:
if (x < 10)
if (y < 10)
System.out.println("A");
else
System.out.println("B");
else
if (y < 6)
System.out.println("C");
else if (y < 10)
System.out.println("D");
else
System.out.println("E");
Um die Aufgabenstellung anspruchsvoller zu machen, wurde hier bewusst auf Einrückungen verzichtet.
Geben Sie an, welcher Buchstabe jeweils ausgegeben wird, wenn x und y folgende Werte haben:
- x = 7, y = 7
- x = 8, y = 11
- x = 10, y = 7
- x = 11, y = 11
Aufgabe 3.4-7
Schreiben Sie eine Anweisung, die Folgendes leistet: Liegt die Zahl tag im Bereich von 1 bis 5, soll „Wochentag“ ausgegeben werden. Liegt tag zwischen 6 und 7, soll „Wochenende“ ausgegeben werden. Andernfalls soll „Fehler“ ausgegeben werden.
Aufgabe 3.4-8
Schreiben Sie eine Methode
public int min(int a, int b, int c)
die die kleinste dieser drei Zahlen zurückgibt.
Aufgabe 3.4-9
Schreiben Sie eine Methode zur Berechnung einer Steuer:
public double steuer(double betrag)
Ist der zu versteuernde Betrag kleiner als 5.000 Euro, müssen keine Steuern gezahlt werden. Bei einem Betrag ab 5.000 Euro sind 10 % Steuern zu zahlen, bei einem Betrag ab 20.000 Euro 15 % und bei einem Betrag ab 50.000 Euro 20 %.
Lösungsvorschlag (Zugangsdaten erforderlich) / Lösungen für Schülerinnen und Schüler
Nun noch etwas Praxisbezug: Auch Sie werden später wahrscheinlich einmal Steuern zahlen. Einen ersten Überblick über die tatsächlichen Abzüge vom Bruttolohn können Sie sich mit dem Brutto-Netto-Rechner von Smartsteuer verschaffen.
Beachten Sie allerdings, dass die tatsächliche Steuerbelastung von zahlreichen Faktoren abhängt und wesentlich komplizierter berechnet wird als in dieser vereinfachten Aufgabe.
Aufgabe 3.4-9 – Expertenvariante
Orientieren Sie sich an dem oben genannten Brutto-Netto-Rechner und erweitern Sie Aufgabe 3.4-9 um weitere Parameter, beispielsweise Steuerklasse und Kirchensteuerpflicht.
Aufgabe 3.4-10
Schreiben Sie eine Methode, die den Preis einer Kinokarte berechnet:
public double preis(int freigabe, int alter, double vollpreis, int reihe)
- Parameter freigabe: Altersfreigabe des Films in Jahren, zum Beispiel 12
- Parameter alter: Alter des Besuchers in Jahren, zum Beispiel 17
- Parameter vollpreis: normaler Preis einer Eintrittskarte ohne Ermäßigung oder Zuschlag, zum Beispiel 6,30 Euro
- Parameter reihe: Sitzreihe des Besuchers, zum Beispiel 12
Die Methode gibt den berechneten Eintrittspreis zurück. Ist der Besucher nicht alt genug für den Film, soll die Meldung „Sie sind leider nicht alt genug für den Film“ ausgegeben und der Wert 0 zurückgegeben werden.
Der Preis einer Eintrittskarte hängt vom Alter des Besuchers ab:
- unter 6 Jahren: halber Vollpreis
- 6 bis 12 Jahre: ¾ des Vollpreises
- 13 bis 16 Jahre: 10 % Ermäßigung
- über 16 Jahre: Vollpreis
Der Preis der Eintrittskarte hängt außerdem von der Reihe ab, in der der Besucher sitzen möchte:
- Reihen 1 bis 4: 30 % Ermäßigung
- Reihen 5 bis 8: keine Ermäßigung
- Reihen 9 bis 11: 30 % Zuschlag
- Reihe 12: 50 % Zuschlag
Seitenanfang
Weiter mit der switch-Anweisung …