Home > Informatik > Stufe EF > Folge 3: Fallunterscheidungen

3.4 if-else-Bedingungen

Waage - Berechnungen - Fallunterscheidungen - if-else-Bedingungen - switch-Anweisung

Entweder - oder

if-else-Bedingung

Fallunterscheidungen

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

Schauen wir uns einmal folgendes Beispiel einer if-else-Bedingung 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.

Logische Bedingungen

Dieser Lernbaustein informiert Sie über dieses wichtige Thema.

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 false, denn andere Werte gibt es hier nicht), so wird die Anweisung nicht ausgeführt. Statt dessen wird überprüft, ob es einen else-Zweig gibt. Ist ein solcher else-Zweig vorhanden, so wird die Anweisung in diesem else-Zweig ausgeführt. Ist kein else-Zweig vorhanden, so wird die Anweisung im Quelltext ausgeführt, die nach der if-Bedingung kommt (von einer if-else-Bedingung kann dann nicht mehr die Rede sein).

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) / Lösungen für Schüler(innen))

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 zur oben dargestellten if-else-Bedingung

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, true, 1), dann wird "Sie sind zu leicht" ausgegeben. Das Ausgabesymbol erinnert an ein Stück abgerissenes Papier. Ist die Bedingung nicht erfüllt (nein, false, 0), 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 in diesem Beispiel 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:

siehe folgenden Text

Flussdiagramm für eine Dreifachauswahl

Aufgabe 3.4-2

Erläutern Sie dieses Flussdiagramm, begründen Sie, wieso es eine Dreifachauswahl realisiert!

Lösungsvorschlag (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

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) / Lösungen für Schüler(innen))

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");
else 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.

Lösungsvorschlag (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Weitere Aufgaben und Übungen

Aufgabe 3.4-5

Betrachten Sie folgende Dreifachauswahl:

if (gewicht < idealgewicht())
   System.out.println("Sie sind zu leicht");
else if (gewicht > idealgewicht())
   System.out.println("Sie sind zu schwer");
else if (gewicht == idealgewicht())
   System.out.println(“Sie haben Idealgewicht”);

1. Begründen Sie, warum die Art und Weise der Implementation nicht optimal ist.

2. Schreiben Sie eine bessere Version!

Lösungsvorschlag (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Aufgabe 3.4-6

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.print(„etwas zu groß, aber fast richtig");
   else if (rate > 18)
      System.out.print("zu groß");
   else if (rate > 23)
      System.out.print("viel zu groß");
} 

Lösungsvorschlag (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Aufgabe 3.4-7

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) / Lösungen für Schüler(innen))

Aufgabe 3.4-8

Schreiben Sie eine Anweisung auf, die folgendes leistet: Wenn die Zahl tag im Bereich von 1 bis 5 liegt, soll "Wochentag" ausgegeben werden. Liegt tag zwischen 6 und 7, wird "Wochenende" ausgegeben. Andernfalls wird "Fehler" ausgegeben.

Lösungsvorschlag (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Und weil's so schön ist: Noch mehr Aufgaben

Aufgabe 3.4-9

Schreiben Sie eine Methode

public int min(int a, int b, int c)

welche die kleinste dieser drei Zahlen zurück gibt.

Lösungsvorschlag (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Aufgabe 3.4-10

Schreiben sie eine Methode zur Berechnung einer Steuer.

public double steuer(double betrag)

Wenn der zu versteuernde Betrag kleiner als 5000 Euro ist, müssen gar 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 sogar 20%.

Lösungsvorschlag (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Aufgabe 3.4-11

Schreiben Sie eine Methode, die den Preis einer Kinokarte berechnet

public double preis(int freigabe, int alter, int vollpreis, int reihe)

  • Parameter freigabe: Altersfreigabe in Jahren für den jeweiligen Film (zum Beispiel 12)
  • Parameter alter: Das Alter des Besuchers in Jahren (zum Beispiel 17)
  • Parameter vollpreis: Der normale Preis einer Eintrittskarte ohne Ermäßigung oder Zuschlag (zum Beispiel 6,30 €)
  • Parameter reihe: Die Reihe, in der der Besucher sitzen möchte (zum Beispiel 12)

Rückgabewert: Der Eintrittspreis, falls der Besucher alt genug für den Film ist, ansonsten Meldung "Sie sind leider nicht alt genug für den Film".

Der Preis einer Eintrittskarte hängt vom Alter des Besuchers ab:

  • Unter 6 Jahre = halber Vollpreis;
  • 6 - 12 Jahre = ¾ Vollpreis,
  • 13 - 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 (vorne) = 30% Ermäßigung,
  • Reihen 5 bis 8 (mitte) = keine Ermäßigung
  • Reihen 9 bis 11 (hinten) = 30% Zuschlag,
  • Reihe 12 (ganz hinten) = 50% Zuschlag.

Lösungsvorschlag (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Seitenanfang -
Weiter mit der switch-Anweisung...