Informatik > Lexikon

if-else-Anweisung

Beispiel

Hier zunächst einmal ein typisches Anwendungsbeispiel für eine if-else-Anweisung:

1    if (gewicht < idealgewicht)
2       System.out.println("Sie sind zu leicht");
3    else
4       System.out.println("Sie sind nicht zu leicht");

Dieses Beispiel kennen Sie wahrscheinlich aus der Folge 3.3: Fallunterscheidungen.

In Zeile 1 wird der Unterschied zwischen dem Idealgewicht der Person und dem tatsächlichen Gewicht ermittelt. Das Ergebnis wird dann mit der Zahl Null verglichen. Wenn das Gewicht der Person kleiner ist als ihr Idealgewicht, so wird in der Zeile 2 die Meldung ausgegeben "Sie sind zu leicht".

Trifft diese Bedingung gewicht < idealgewicht aber nicht zu, dann wird zur Zeile 4 gesprungen, und es wird "Sie sind nicht zu leicht" ausgegeben. Hier die graphische Darstellung der obigen Fallunterscheidung als Flussdiagramm:

Flussdiagramm einer zweiseitigen Fallunterscheidung

Die Meldung "Sie sind zu schwer" darf nicht ausgegeben werden, wenn die Bedingung gewicht < idealgewicht nicht zutrifft, denn es könnte ja sein, dass die Person genau das Idealgewicht hat, dass also der Fall gewicht = idealgewicht zutrifft.

Syntax

Hier sehen Sie ein Syntaxdiagramm der if-else-Anweisung. Als erstes kommt das Wort "if", dann kommt eine logische Bedingung, die durch runde Klammern eingeschlossen werden muss.

Eine der beiden Anweisungslisten, die im obigen Quelltext eigentlich nur aus je einer einzelnen Anweisung bestehen, wird auf jeden Fall ausgeführt. Entweder die eine, oder die andere.

Einseitige und zweiseitige Auswahl

Gemäß dem Syntaxdiagramm ist auch eine if-Anweisung wie die folgende erlaubt:

1   x = berechnung();
2   if (x < 100)
3      System.out.println("x ist kleiner als 100!");
4   x = x*10;

Hier liefert in Zeile 1 eine sondierende Methode berechnung ein Ergebnis zurück, dass der Variablen x zugewiesen wird. In Zeile 2 wird x mit 100 verglichen. Wenn x < 100 ist, wird eine entsprechende Meldung ausgegeben. Trifft die Bedingung x < 100 aber nicht zu, so passiert weiter nichts. Das Programm macht dann mit der Zeile 4 weiter.

Nach der ersten Anweisungsliste muss nichts mehr kommen, der alternative else-Zweig ist laut Syntaxdiagramm nicht zwingend vorgeschrieben. Eine solche if-Anweisung wird dann auch als einseitige Auswahl bezeichnet, im Gegensatz zur if-else-Anweisung, die ja eine zweiseitige Auswahl ist.

Dreiseitige Auswahl

Dreiseitige Auswahl, Flussdiagramm

Hier sehen wir das Flussdiagramm einer dreiseitigen Auswahl. Zunächst haben wir eine if-else-Bedingung, in der wieder gefragt wird, ob das Gewicht der Person kleiner ist als das Idealgewicht. Wenn dies der Fall ist, dann landen wir im if-Zweig dieser Bedingung, im Bild links und rot markiert. Es wird "Sie sind zu leicht" ausgegeben.

Trifft diese Bedingung nicht zu, so könnte die Person ja entweder genau das Idealgewicht haben, oder sie ist schwerer. Also besteht der else-Zweig der if-else-Bedingung aus einer weiteren if-else-Bedingung, die wir hier als die "innere" if-else-Bedingung bezeichnen wollen.

In dieser inneren if-else-Bedingung wird nun die Frage gestellt, ob das Gewicht der Person größer ist als ihr Idealgewicht. Wenn diese "innere" Bedingung zutriff, wird "Sie sind zu schwer" ausgegeben. Trifft auch diese Bedingung nicht zu, dann steht fest, dass die Person weder zu schwer noch zu leicht ist, also muss sie zwingend das Idealgewicht haben, und eine entsprechende Meldung wird ausgegeben.

Im Java-Quelltext sieht diese dreiseitige Auswahl dann so aus:

1   if (gewicht < idealgewicht)
2      System.out.println("Sie sind zu leicht");
3   else if (gewicht > idealgewicht)
4      System.out.println("Sie sind zu schwer");
5   else
6      System.out.println("Perfekt");

Wenn Sie hier die dreiseitige Auswahl nicht erkennen, hilft vielleicht die folgende Schreibweise des gleichen Quelltextes weiter:

1   if (gewicht < idealgewicht)
2      System.out.println("Sie sind zu leicht");
3   else 
4      if (gewicht > idealgewicht)
5         System.out.println("Sie sind zu schwer");
6      else
7         System.out.println("Perfekt");

Hier wurde durch eine andere Einrückung versucht, die Struktur der geschachtelten if-else-Anweisung deutlicher zu machen.

Mehrseitige Auswahlen

Die Syntax der if-else-Anweisung erlaubt auch die Konstruktion von Auswahlen, bei denen zwischen vier, fünf oder mehr Fällen unterschieden wird. Hier ein Beispiel:

if (gewicht < idealgewicht*0.8)
   fall = 1;
else if (gewicht < idealgewicht)
   fall = 2;
else if (gewicht > idealgewicht * 1.2)
   fall = 5;
else if (gewicht > idealgewicht)
   fall = 4;
else
   fall = 3;

Hier muss man allerdings auf die richtige Reihenfolge der "Fragen" achten. Hätte man dieses Konstrukt aus fünf if-else-Anweisungen etwa so begonnen:

if (gewicht < idealgewicht)
   fall = 1;
else if (gewicht < idealgewicht*0.8)
   fall = 2;
else …

dann würde das zu einem logischen Fehler führen. Angenommen, die Person hat ein Gewicht, dass nur 70% des Idealgewichts beträgt. Dann wäre die erste Bedingung bereits true, und der else-Zweig würde gar nicht mehr abgearbeitet. Der Algorithmus käme zum falschen Schluss, dass der Fall 1 vorliegt.

Das dangling-else-Problem

Hierzu gibt es einen eigenen Lexikon-Eintrag, weil es sich um ein sehr wichtiges Problem handelt.

Interne Links: