Home > Informatik > Stufe EF > Folge 3: Fallunterscheidungen

3.3 Fallunterscheidungen

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

Schritt 10 - Besseres Idealgewicht

Kommen wir zurück zur letzten Übung der Folge 3.2. Eine Schülerin, die gleichzeitig Ernährungslehre hat, fand bei einer Internet-Recherche eine Formel zur Berechnung des Idealgewichts, die auch das Geschlecht der Person berücksichtigt. Danach haben Frauen ein etwas geringeres Idealgewicht als Männer, wenn ansonsten Gewicht und Größe übereinstimmen.

In der Folge 2.3 hatten Sie sich bereits mit Fallunterscheidungen beschäftigt, wenn auch nur kurz. Nun kommen wir auf dieses wichtige Thema zurück. Wie könnte eine Methode idealgewicht() aussehen, die das Idealgewicht geschlechtsspezifisch berechnet?

Wenn das Geschlecht der Person weiblich ist, soll der folgende return-Befehl ausgeführt werden.

return (groesse-100)*0.85;

Ist das Geschlecht der Person dagegen männlich, soll der return-Befehl

return (groesse-100)*0.9;

ausgeführt werden.

In der Folge 2.3 hatten Sie mit folgender if-Anweisung schon gearbeitet:

public void moveHorizontal(int distance)
{
	erase();
	if (xPosition + distance < 300)
		xPosition += distance;
	draw();
}

Man könnte nun - aufbauend auf diesem Beispiel - die Methode idealgewicht() folgendermaßen erweitern:

public double idealgewicht()
{
   if (geschlecht == 'w')
      return (groesse-100)*0.85;
   if (geschlecht == 'm')
      return (groesse-100)*0.90;
}

Das ist schon mal nicht schlecht. Das Attribut geschlecht hätte dann den Datentyp char, in geschlecht kann man also genau einen Buchstaben bzw. ein Zeichen (engl. character, daher "char") speichern. Solche Zeichen des Typs char müssen grundsätzlich in einfachen Anführungszeichen stehen, also 'm' oder 'w', und nicht "m" oder "w". Würde man "m" verwenden, wäre das kein char-Wert, sondern ein String-Wert der Länge 1.

Betrachten Sie nun folgende (bessere) Alternative:

public double idealgewicht()
{
   if (geschlecht == 'w')
      return (groesse-100)*0.85;
   else
      return (groesse-100)*0.90;
}

Diese sondierende Methode schaut zunächst nach, ob das Geschlecht 'w' ist. Wenn das der Fall ist, wird die entsprechende Formel angewandt und das Ergebnis ausgegeben. Ist das Geschlecht nicht 'w', wird die zweite Formel benutzt und deren Ergebnis ausgegeben.

Aufgabe 3.3-1A

Die obige Methode funktioniert zwar, verhält sich aber nicht immer fehlerfrei. Erläutern Sie, unter welchen Umständen es beim Aufrufen dieser Methode zu Fehlern kommen kann.

Lösungen der Aufgaben und Übungen mit zusätzlichen Erläuterungen für die Lehrperson (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Aufgabe 3.3-1B

Entwerfen Sie eine fehlerfreie Methode idealgewicht().

Lösungen der Aufgaben und Übungen mit zusätzlichen Erläuterungen für die Lehrperson (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

if-else-Bedingung

In diesem Lernbaustein erfahren Sie alles Wichtige über if-else-Bedingungen.

Schritt 11 - Einlesen des Geschlechts

Wir hatten bereits gesagt, dass ein neues Attribut geschlecht erforderlich ist, um die verbesserte idealgewicht()-Methode auszuführen. Wie kann der Wert dieses neuen Attributes nun eingelesen werden?

Dazu schauen wir uns doch einfach mal an, wie der Wert des ersten Attributs gewicht eingelesen wurde:

public void setGewicht(double gew)
{
   gewicht = gew;
}

Der neue Wert wurde der Methode als Parameter übergeben. In der Methode wurde dann der Wert des Parameters in das Attribut gewicht hineinkopiert. Hinterher hat gewicht also den gleichen Wert wie der Parameter gew.

Das Ganze funktioniert natürlich nur dann, wenn das Attribut und der Parameter den gleichen Datentyp besitzen. Hätte gewicht beispielsweise den Datentyp String, so würde die Zuweisung zu einem Fehler führen. Da aber gewicht und gew beide vom Datentyp double sind, gibt es hier keine Probleme.

Datentypen

Wenn Sie nicht mehr wissen, welche Datentypen es in Java gibt, gehen Sie auf diesen Lernbaustein.

Übung 3.3-2

Schreiben Sie eine Methode zum Einlesen des Geschlechts. Das Attribut für das Geschlecht hat den Datentyp char.

Lösungen der Aufgaben und Übungen mit zusätzlichen Erläuterungen für die Lehrperson (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

⇒ Speichern Sie Ihr BlueJ-Projekt unter einer fortlaufenden Versionsnummer ab und ergänzen Sie die Kopie dann um die hier neu behandelten Methoden. Testen Sie Ihr Programm ausführlich!

Übung 3.3-3

Erweitern Sie die anzeigen()-Methode um die Möglichkeit einer Bewertung des tatsächlichen Gewichts. Wenn die Person das Idealgewicht um mehr als 1 kg überschreitet, soll eine Meldung wie "Sie sind zu schwer" in der Konsole erscheinen. Ist die Person umgekehrt mehr als 1 kg unter dem Idealgewicht, sollte eine Meldung wie "Sie sind zu leicht" erscheinen.

Treffen beide Bedingungen nicht zu, scheint die Person ja ziemlich gut im Bereich des Idealgewichts zu liegen, und dann sollte eine entsprechende Meldung erscheinen.

Lösungen der Aufgaben und Übungen mit zusätzlichen Erläuterungen für die Lehrperson (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Übung 3.3-4 (für Experten)

Betrachten Sie das Beispiel 3 im Lernbaustein " " und implementieren Sie dann für die Klasse Waage eine entsprechende Methode, die das Gewicht der Person noch differenzierter beurteilt. Die Methode sollte folgende fünf verschiedene Fälle unterscheiden: "Viel zu schwer", "zu schwer", "perfekt", "zu leicht" und "viel zu leicht".

  1. Als "viel zu schwer" soll jemand gelten, dessen Gewicht mehr als 5 kg über dem Idealgewicht liegt.
  2. Eine Person, deren Gewicht mehr als 1 kg über dem Idealgewicht liegt, gilt als "zu schwer".
  3. Liegt das Gewicht mehr als 1 kg unter dem Idealgewicht, ist die Person "zu leicht".
  4. Liegt ihr Gewicht mehr als 5 kg unter dem Idealgewicht, gilt sie als "viel zu leicht".
  5. Liegt das Gewicht höchstens 1 kg über oder unter dem Idealgewicht, ist das Gewicht "perfekt".

Lösungen der Aufgaben und Übungen mit zusätzlichen Erläuterungen für die Lehrperson (Zugangsdaten erforderlich) / Lösungen für Schüler(innen))

Seitenanfang -
Weiter mit der Folge 3.4 - if-else-Bedingungen...