Home > Informatik > Stufe EF > Folge 3: Fallunterscheidungen

3.4 if-else-Bedingungen

class Person - Getter/Setter - Fallunterscheidungen - if-else-Bedingungen - switch-Anweisung

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.

Flussdiagramm einer einseitigen Auswahl

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.

Flussdiagramm einer zweiseitigen 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!

Lösungsvorschlag (Zugangsdaten erforderlich)

Die Mehrfachauswahl in Java

Oft will man nicht nur zwischen zwei verschiedenen Fällen unterscheiden, sondern beispielsweise zwischen drei Fällen:

  1. "Sie sind zu leicht"
  2. "Sie sind zu schwer"
  3. "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:

Flussdiagramm einer Dreifachauswahl

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!

Lösungsvorschlag (Zugangsdaten erforderlich)

Aufgabe 3.4-3

Zeichnen Sie ein Flussdiagramm, das eine Fünffachauswahl ermöglicht:

  1. „Sie sind viel zu leicht“
  2. „Sie sind zu leicht“
  3. „Perfekt“
  4. „Sie sind zu schwer“
  5. „Sie sind viel zu schwer“

Lösungsvorschlag (Zugangsdaten erforderlich)

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!

Lösungsvorschlag (Zugangsdaten erforderlich)

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ß");
}

Lösungsvorschlag (Zugangsdaten erforderlich)

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:

  1. x = 7, y = 7
  2. x = 8, y = 11
  3. x = 10, y = 7
  4. x = 11, y = 11

Lösungsvorschlag (Zugangsdaten erforderlich)

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.

Lösungsvorschlag (Zugangsdaten erforderlich)

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.

Lösungsvorschlag (Zugangsdaten erforderlich)

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

Lösungsvorschlag (Zugangsdaten erforderlich)

Seitenanfang
Weiter mit der switch-Anweisung