|
|
||
Folge 3: Sie werden gewogen! |
||
Buch-VersionDie Folgen 1 bis 9 gibt es jetzt auch als Buch-Version. Noch nicht gedruckt, aber in Form von drei PDF-Dateien. Die Buch-Version sieht besser aus und enthält Themen, die ich aus Zeitgründen im regulären Kurs nicht behandeln kann, zum Beispiel das komplette Kapitel 6 sowie einige Exkurse. |
||
Schritt 1 - Neue Klasse erzeugenErzeugen Sie eine neues leeres Projekt "Waage" mit einer Klasse Waage.
1 Erzeugen der neuen Klasse Waage |
Theorieteil:
Sie haben Glück. Einen eigenen Theorieteil zu dieser Folge gibt es nicht. In einem neuen Projekt sollen Sie all das anwenden, was Sie bisher gelernt haben. Vorausgesetzt wird allerdings, dass Sie den Theorieteil zur Folge 1 gelesen und verstanden haben, einschließlich der Sonderseite über Parameter. |
|
Schritt 2 - Quelltext abspeckenDoppelklicken Sie auf die Klasse Waage. Jetzt öffnet sich der Quelltexteditor. Entfernen Sie
Der Quelltext, der jetzt übrig bleibt (der Minimal-Quelltext), müsste so aussehen:
2 Quelltext der neuen Klasse Waage, auf das unmittelbar Notwendige reduziert Eine noch bessere Übung wäre es für Sie, wenn Sie den gesamten Quelltext markieren, löschen und dann den in Abb. 2 gezeigten Text selbst eintippen. |
||
Schritt 3 - Eine ganz einfache WaageErgänzen Sie die Waage um das Attribut gewicht. Ihr Quelltext müsste hinterher so aussehen: public class Waage
{
private double gewicht;
public Waage()
{
}
}
Es reicht nicht einfach aus, das Wort "gewicht" an die richtige Stelle zu schreiben, sondern es müssen noch zwei Dinge beachtet werden. Jedem Attribut muss ein Datentyp zugeordnet werden, und grundsätzlich sollten alle Attribute als privat erklärt werden, so dass nur die Methoden der Klasse selbst Zugriff auf die Attribute haben. Hätten wir gewicht als öffentlich erklärt (Schlüsselwort public), so könnte man jederzeit von außerhalb der Klasse Waage auf das Attribut zugreifen, was nicht im Sinne des Prinzips der Datenkapselung ist. |
||
Schritt 4 - Der ObjektinspektorKompilieren Sie nun die Klasse Waage und erzeugen Sie mit der rechten Maustaste ein Objekt der Klasse Waage. Klicken Sie dann mit der rechten Maustaste auf das Objekt und rufen Sie den Objektinspektor auf. Sie sollten dann folgendes Bild sehen:
3 Der Objektinspektor zeigt den Wert des Attributs gewicht Das Attribut gewicht ist vorhanden, und es hat den Wert 0.0! |
|
|
Schritt 5 - Eine Methode zum WiegenÖffnen Sie nun wieder den Quelltexteditor durch einen Doppelklick auf die Klasse Waage und ergänzen Sie die Klasse durch die Methode wiegen(): public class Waage
{
private double gewicht;
public Waage()
{
}
public void wiegen(double gew)
{
gewicht = gew;
}
}
Beobachten Sie dann, wie die neue Methode arbeitet. Kompilieren Sie die Klasse Waage, erzeugen Sie ein Objekt waage1 und klicken Sie mit der rechten Maustaste auf das Objekt. Wählen Sie dann die Methode wiegen() aus. Es öffnet sich ein Fenster "BlueJ: Method Call", in dem die Methode einschließlich der einzusetzenden Parameter angezeigt wird. Sie müssen jetzt nur noch ein reelle Zahl für das gemessene Gewicht eintragen, z.B. 95.5. Klicken Sie dann auf den OK-Button und rufen Sie dann den Objektinspektor für das Objekt auf. Das Attribut gewicht müsste dann den Wert haben, den Sie soeben als Parameter übergeben haben.
5 Eingabe des Gewichts |
||
Schritt 6Wir wollen jetzt aus unserer normalen Waage eine Superwaage machen. Sie soll nämlich nicht nur Ihr Gewicht wiegen können, sondern auch Ihre Körpergröße erfassen, um dann Ihr Idealgewicht zu berechnen. Und schon kommt Ihre erste Übung in dieser Folge. Übung 3.1 (1 Punkt)Ergänzen Sie die Klasse Waage um eine Methode messen(), welche ähnlich wie wiegen() arbeitet, dabei aber statt des Gewichts die Körpergröße abfragt und an das Attribut groesse weitergibt. Achtung, dieses Attribut ist neu; Sie müssen groesse an geeigneter Stelle im Quelltext der Klasse Waage deklarieren. |
Der Befehl Hinweis:
Schreiben Sie sich die Methode anzeigen() aus Abb. 7 in ihre Mappe, so haben stets ein Beispiel für einen System.out.println-Befehl mit einem zusammengesetzten Ausdruck vor Augen. Fallstricke: |
|
Schritt 7 - Eine Methode zum Ausgeben der WerteAuf die Dauer ist es lästig, wenn man immer den Objektinspektor aufrufen muss, um sich wichtige Attributwerte anzuschauen. Andererseits ist der Objektinspektor auch recht nützlich, man kann sich die Werte mehrere Attribute gleichzeitig ansehen. Sie werden jetzt lernen, wie man eine Methode schreibt, die das Anzeigen von Attributwerten (und mehr) für Sie erledigt. Tippen Sie an geeigneter Stelle folgende Methode in den Quelltext der Klasse Waage ein: public void ausgeben()
{
System.out.println("Gewicht :" + gew);
System.out.println("Körpergröße :" + gr);
}
Beim Aufruf dieser Methoden soll sich ein so genanntes Terminalfenster öffnen, das folgendermaßen aussieht:
7 Das Terminal Window von BlueJ, auch Konsole genannt Leider funktioniert das Vorhaben noch nicht ganz. Beim Kompilieren meldet BlueJ nämlich plötzlich einen Fehler: Die Variablen gew und gr sind unbekannt: "cannot find symbol - variable gew". Dabei haben Sie den Parameter gew doch definiert, als Sie die Methode wiegen() eingegeben haben. Im Lexikonartikel "Gültigkeitsbereich" können Sie nachlesen, warum BlueJ hier einen Fehler meldet. Korrigieren Sie diesen Fehler, indem Sie im println-Befehl nicht die Variable gew und gr benutzen, sondern die Attribute gewicht und groesse: public void ausgeben()
{
System.out.println("Gewicht :" + gewicht);
System.out.println("Körpergröße :" + groesse);
}
Wenn Sie die Klasse Waage jetzt kompilieren, ein Objekt erzeugen, erst die Methoden wiegen() und messen() aufrufen und dann die Methode ausgeben(), so erscheint das Terminalfenster ähnlich wie in Abb. 7 und zeigt Ihnen die eingegebenen Werte für Gewicht und Größe an. Der Befehl System.out.println() dient allgemein zur Ausgabe von Zeichenketten, Zahlen etc. Die Ausgabe erfolgt in dem so genannten Terminal-Window oder auf deutsch Terminalfenster oder Konsole. Unter diesem Terminalfenster müssen Sie sich so etwas Ähnliches vorstellen wie einen uralten Textcomputer, der 16 Zeilen mit jeweils 64 hellgrünen Zeichen auf dunkelgrünem Hintergrund darstellen konnte. Der Plus-Operator im println()-Befehl dient nicht zum Addieren der beiden Ausdrücke, sondern zum Zusammenfügen der beiden Ausdrücke. |
||
Schritt 8 - Berechnung des IdealgewichtsDas Idealgewicht einer Person berechnet sich nach der Formel Idealgewicht = (Körpergröße - 100) - 10% Folgende Java-Methode setzt diese Formel um: public double idealgewicht()
{
return (groesse-100)*0.9;
}
Geben Sie diese Methode in den Quelltext der Klasse Waage ein, kompilieren Sie die Klasse, erzeugen Sie ein Objekt, führen Sie die Methode messen() aus und übergeben Sie als Parameter Ihre Körpergröße in Zentimetern, und rufen Sie dann die Methode idealgewicht() auf. Es erscheint ein neues Fenster (siehe Abbildung 8) mit Ihrem Idealgewicht.
8 Ausgabe des Ergebnisses der Methode idealgewicht() Bevor wir weitermachen, wollen wir die Methode noch etwas näher analysieren. Durch das Schlüsselwort public wird die Methode zu einer öffentlichen Methode, das heißt, sie erscheint in dem Kontextmenü der Objekte. An dem Schlüsselwort double erkennen wir, dass es sich um eine sondierende Methode handelt, die einen Wert zurück liefert, und zwar einen Wert vom Datentyp double (reelle Zahl). Der eigentliche Quelltext der Methode besteht nur aus einer einzigen Zeile, die mit dem Wort return beginnt. Dieses Schlüsselwort weist das Java-System an, die Methode zu beenden und den hinter return stehenden Wert als Rückgabewert für idealgewicht() zu übernehmen. Hinter return steht die Formel zur Berechnung des Idealgewichts, also wird vor dem Beenden der Methode das Idealgewicht berechnet und dann als Wert zurückgegeben. |
|
|
Schritt 9 - Ausgabe des IdealgewichtsWir wollen das Programm noch verbessern: Das Idealgewicht soll automatisch ausgegeben werden, wenn wir die Methode ausgeben() aufrufen. Verändern Sie dazu die Methode ausgeben() folgendermaßen: public void ausgeben()
{
System.out.println("Gewicht :" + gewicht);
System.out.println("Körpergröße :" + groesse);
System.out.println("Idealgewicht :" + idealgewicht());
}
In der neuen Zeile der Methode ausgeben() wird der String "Idealgewicht : " nicht mit einem Attribut verknüpft, sondern mit dem Rückgabewert einer sondierenden Methode. Dass eine Methode aufgerufen wird, erkennt man an der leeren Klammer hinter dem Wort "idealgewicht". Kommen wir nun zu Ihrer nächsten Übung. Übung 3.2 (2 Punkte)Ergänzen Sie die Klasse Waage um eine Methode differenz(), welche ähnlich arbeitet wie die Methode idealgewicht(), dabei allerdings die Differenz zwischen Idealgewicht und tatsächlichem Gewicht berechnet und zurückliefert. Ergänzen Sie anschließend die Methode ausgeben() so, dass in einer vierten Zeile diese Differenz ausgegeben wird. |
|
|
Schritt 10 - Eine bessere AusgabeAllzu überzeugend ist die Waage noch nicht. Sie kann das Gewicht feststellen, die Größe messen, das Idealgewicht berechnen und die Differenz zwischen Idealgewicht und gemessenem Gewicht ermitteln, und sie kann diese vier Daten in einem Terminalfenster anzeigen. Wie schön wäre es doch, wenn die Waage auch anzeigen könnte: "Sie sind zu schwer!" oder "Sie sind zu leicht!" oder sogar: "Sie müssen 24.3 kg abnehmen!" bzw. "Sie müssen 6.4 kg zunehmen!". Beginnen wir mit der etwas einfacheren Aufgabe. Die Waage soll ausgeben, ob der Benutzer zu schwer oder zu leicht ist. |
||
|
Verändern Sie die Methode ausgeben wie folgt: public void ausgeben()
{
System.out.println("Gewicht :" + gewicht);
System.out.println("Körpergröße :" + groesse);
if (differenz() < 0)
System.out.println("Sie sind zu leicht!");
else
System.out.println("Sie sind zu schwer!");
}
|
||
| Wenn die berechnete Differenz negativ ist (kleiner als 0), so soll ausgegeben werden: "Sie sind zu leicht!". Andernfalls "Sie sind zu schwer!". Probieren Sie, ob die Methode ausgeben() korrekt arbeitet!
Lesen Sie dann auf jeden Fall den Theorieteil "Die if-else-Anweisung". Hier erfahren Sie alles über einfache, doppelte und dreifache Verzweigungen, wie sie häufig in Programmen benötigt werden. |
|
|
Übung 3.3 (2 Punkte)Verändern Sie Ihre ausgeben-Methode so, dass sie genau ausgibt, wieviele kg Sie zu schwer oder zu leicht sind. Die Ausgabe könnte z.B. so aussehen: Gewicht: 95 kg Übung 3.4 (4 Punkte)Bei Übung 3.3 haben Sie wahrscheinlich folgenden Algorithmus für die Methode realisiert:
9 Ein Flussdiagramm: Für eine dreiseitige Auswahl benötigt man zwei Entscheidungen! Die Meldung "Sie haben Idealgewicht" wird hier nur dann angezeigt, wenn das gemessene Gewicht bis auf das Milligramm mit dem Idealgewicht identisch ist. Verändern Sie den Algorithmus bitte so, dass er toleranter ist. Die Meldung "Idealgewicht" soll auch noch dann angezeigt werden, wenn das tatsächliche Gewicht maximal 1 kg nach oben oder unten vom Idealgewicht abweicht. |
||
Übung 3.5 (3 Punkte)Eine weitere Verbesserung des Algorithmus: Bisher wird nur ausgegeben, ob die Person Idealgewicht, Über- oder Untergewicht hat. Verändern Sie den Algorithmus so, dass jetzt fünf Fälle unterschieden werden:
Übung 3.6 (3 Punkte)Zeichnen Sie ein Flussdiagramm für den Algorithmus aus Übung 3.5! Tipp: Für eine zweiseitige Auswahl benötigt man eine Entscheidungsraute, für eine dreiseitige Auswahl zwei Rauten und so weiter. Hier haben wir es mit einer fünfseitigen Auswahl zu tun; überlegen Sie jetzt einmal genau, wieviele Entscheidungen Sie dann treffen müssen! |
Die if-else-Anweisung |
|
Weiter mit Folge 4: Auto fahren
|
|
|
|
Diese HTML-Seite wurde erstellt von Ulrich Helmich am 23. Januar 2005. |
||