Entweder - oder

Haben Sie schon die Lernbausteine "Fallunterscheidungen" und "if-else-Bedingungen" durchgearbeitet? Dort wird Einiges gesagt über if-else-Bedingungen, auch ein paar typische Fallbeispiele sind dort angegeben.

Schauen wir uns noch einmal ein Beispiel aus dieser Folge an:

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

In Zeile 1 finden wir die logische Bedingung, die hier überprüft werden soll. Die logische Bedingung lautet

gewicht < idealgewicht()

Der Wert des Attributes gewicht wird mit dem Rückgabewert der sondierenden Methode idealgewicht() verglichen. Ist gewicht kleiner als der Rückgabewert, so ist die Bedingung erfüllt, das Ergebnis hat dann den Wert true. Ist das Gewicht aber nicht kleiner (also größer oder gleich) als das Idealgewicht, ist das Ergebnis dieses Vergleichs false.

Nur wenn das Ergebnis des Vergleichs true ist, wenn also die Bedingung erfüllt ist, wird die folgende Anweisung ausgeführt:

System.out.println("Sie sind zu leicht");

Ist das Ergebnis des Vergleichs dagegen nicht true (also automatisch false, andere Werte gibt es hier nicht), so wird die Anweisung nicht ausgeführt, sondern es wird überprüft, ob es einen else-Zweig gibt. Ist das der Fall, so wird die Anweisung im else-Zweig ausgeführt, wenn die Bedingung nicht erfüllt ist.

Aufgabe 3.4-1

Begründen Sie, wieso die Anweisung im else-Zweig nicht

System.out.println("Sie sind zu schwer");

heißen darf!

Graphische Darstellung, Flussdiagramme

Zur graphischen Darstellung solcher if-else-Bedingungen benutzt man gern Flussdiagramme. Das Flussdiagramm für unseren speziellen Fall sieht dann so aus:

Das Flussdiagramm startet mit der Entscheidungsraute, die hier gelb dargestellt ist. In dieser Entscheidungsraute ist die logische Bedingung notiert, die überprüft werden soll. Die Schreibweise in einem Flussdiagramm kann recht locker gehandhabt werden, man muss keine Java-Syntax benutzen. Der Grund: Ein Flussdiagramm ist eine abstrakte Darstellung eines Programmflusses; wie der Programmfluss dann implementiert wird, ist von der jeweiligen Programmiersprache abhängig. Ein Flussdiagramm gilt aber für alle Programmiersprachen.

Ist die Bedingung erfüllt (ja), dann wird "Sie sind zu leicht" ausgegeben. Das Ausgabesymbol erinnert an ein Stück abgerissenes Papier. Ist die Bedingung nicht erfüllt (nein), dann wird "Sie sind nicht zu leicht" ausgegeben. Diese Ausgabe ist ebenfalls in einem Ausgabesymbol dargestellt.

Nachdem die Ausgabe - entweder die eine oder die andere - getätigt wurde, wird der nächste Befehl ausgeführt, der hier nicht weiter spezifiziert worden ist. Das Symbol für einfache Befehle ist ein rechteckiger Kasten. Außerdem gibt es noch ein Symbol für Eingaben, das hier aber nicht verwendet wird. Es sieht aus wie eine altertümliche Lochkarte.

Die Mehrfachauswahl

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

  1. "Sie sind zu leicht"
  2. "Sie sind zu schwer"
  3. "Perfekt"

Die if-else-Bedingung ist aber grundsätzlich eine Zweifachauswahl: Entweder ist die Bedingung erfüllt (Fall 1), oder sie ist nicht erfüllt (Fall 2). Wie kann man in Java trotzdem eine Dreifachauswahl realisieren?

Schauen Sie sich dazu das folgende Flussdiagramm an:

Aufgabe 3.4-2

Erläutern Sie dieses Flussdiagramm!

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"

Implementierung einer Mehrfachauswahl

Wir wollen die Fünffachauswahl aus der Aufgabe 3.4-2 nun implementieren. Hier ein erster Vorschlag:

if (gewicht < idealgewicht())
   System.out.println("Sie sind zu leicht");
else if (gewicht < idealgewicht()*0.8)
   System.out.println("Sie sind viel zu leicht");
else if (gewicht > idealgewicht())
   System.out.println("Sie sind zu schwer");
Yelse if (gewicht > idealgewicht()*1.2)
   System.out.println("Sie sind viel zu schwer");
else
   System.out.println("Perfekt");

Aufgabe 3.4-4

Finden Sie heraus, warum der obige Quelltext nicht wie gewünscht arbeitet. Finden Sie den oder die Fehler und korrigieren Sie diese(n).

Falls Sie einen PC zur Verfügung haben, implementieren Sie eine entsprechende Ausgabe-Methode mit der korrekten Fünffachauswahl.