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?
public double idealgewicht()
{
if (geschlecht == 'w')
return (groesse-100)*0.85;
else
return (groesse-100)*0.90;
}
Diese sondierende Methode enthält zwei return-Befehle. Hat das neue Attribut
private char geschlecht
den Wert 'w', so wird die obere Formel angewendet und das Ergebnis der Berechnung mit return zurückgeliefert. Hat geschlecht aber nicht den Wert 'w', so wird automatisch angenommen, dass es sich um das männliche Geschlecht handelt, und es wird die untere Formel angewendet und das Ergebnis mit dem zweiten return-Befehl zurückgeliefert.
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.
Aufgabe 3.3-1B
Entwerfen Sie eine fehlerfreie Methode idealgewicht()
.
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.
Aufgabe 3.3-2A
Schreiben Sie eine Methode zum Einlesen des Geschlechts.
Übung 3.3-2B
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.
Wenn Sie die nächste und letzte Übung dieser Folge bearbeiten wollen, sollten Sie sich vorher genauer mit dem Thema Fallunterscheidungen beschäftigen. Dazu gibt es ja den Lernbaustein "Fallunterscheidungen".
Übung 3.3-4 (für Experten)
Betrachten Sie das Fallbeispiel 3 im Lernbaustein "Fallunterscheidungen" und implementieren Sie dann für die Klasse Waage eine entsprechende Methode, die das Gewicht der Person differenziert beurteilt. Die Methode sollte mindestens fünf verschiedene Fälle unterscheiden.
Arbeitsblätter zur Folge 3.3
Sie sollten jetzt in der Lage sein, die Arbeitsblätter zur Folge 3 zu bearbeiten. Hier geht es auch hauptsächlich um Fallunterscheidungen. Außerdem enthält die PDF-Datei mit den Arbeitsblätter auch ein wichtiges Merkblatt zum Thema "Fallunterscheidungen" sowie ein weiteres Übungsblatt mit Aufgaben, die mit dem Thema "Waage" nichts zu tun haben.