AB05 - Methoden mit Rückgabe

Die Schafe können schon eine ganze Menge. Viel mehr lernt so ein Schaf auch nicht. Daher wenden wir uns nun dem Bauern zu und bringen ihm einiges bei…

Neue Sensoren

Ziel: Methoden mit boolschen Rückgabewerten erstellen können. Parameter verwenden können, um Methoden Zusatzinformationen mitzugeben. Unsere Figuren haben nur eine beschränkte Anzahl von Methoden, die die Umwelt der Figur wahrnehmen (z.B. istVorneFrei(), istVorne("Wasser")). In diesem Arbeitsblatt lernst, du neue (komplexere) Sensoren selbst zu erstellen. Schaue dir dazu die Methode istAufLeeremAcker() des AB5_Bauer an. Im Gegensatz zu den Methoden, die du bisher implementiert hast, gibt diese eine Antwort zurück (wie z.B. auch istVorneFrei()).

(A1)

Teste die Methode istAufLeeremAcker() an den verschiedenen Bauern. Wie beantwortet der Bauer diese Anfrage? Welche Antwortmöglichkeiten gibt es?

(A2)

Analysiere nun den Quelltext zur Methode istAufLeeremAcker() in der Figur AB5_Bauer: Wo tauchen die Antwortmöglichkeiten (true und false) im Quelltext auf? Welcher Befehl sorgt dafür, dass eine Antwort zurückgegeben wird? Wie unterscheidet sich der Methodenkopf, d.h. die mit public … beginnende Zeile, von den bisherigen Methodenköpfen?

Alle bisherigen Methoden wurden mit public void methodenName() {…} programmiert. Void steht dabei für leer/nichts. Void steht an der Stelle, an der der sogenannte Rückgabetyp steht. Es wird also nichts zurückgegeben. Möchte man nun mit true/false antworten, muss man den Rückgabewert als boolean 1) boolean ist ein Variablentyp, der nur die beiden Wahrheitswerte true oder false speichern kann. Der Name ist an George Boole angelehnt, der sich mit dem mathematischen Teilbereich Logik beschäftigt hat und viele mathematische Grundlagen für die Informatik gelegt hat. deklarieren. Mit return true/false; kann man dann den gewünschten Wert zurückgeben. Return beendet außerdem das Unterprogramm. Es werden also keine Befehle mehr nach dem Ausführen eines Return ausgeführt.

(A3) Erntebereit

Reife Tomaten kann man mit ernte("Tomate"); abernten. Damit dabei kein Fehler passiert, muss man testen, ob man überhaupt auf einer Tomate steht und ob diese reif ist. Den Reifegrad kann man mit pruefe("Tomate") bestimmen. Hat er den Wert 100, kann die Tomate geerntet werden. Implementiere die Methode boolean istAufReiferTomate(), die diesen Test vornimmt.

Hinweis 1: Dieser Test soll die Tomate nicht ernten. Tests sollten eigentlich nie Änderungen vornehmen, da der Benutzer das nicht erwartet.
Hinweis 2: In AB4 Aufg. 3 wird erklärt, wie man zwei Bedingungen verknüpfen kann.

(A4) Gießen

Die Tomaten wachsen leider nicht so leicht wie Gras. Tomaten haben einen sehr hohen Wasserbedarf. Daher muss man sie mit benutze("Giesskanne") gießen. Vorher sollte man aber prüfen, ob man auf einer Tomate steht und sie Wasser benötigt (pruefe("Tomate") liefert dann den Wert -1).
Implementiere die Methode boolean istAufDurstigerTomate(), die diesen Test vornimmt.

(A5) Out of Power

Implementiere eine Methode istEnergieSchwach(). Diese soll true zurückgeben, wenn mindestens einer der Energiewerte (Hunger und Durst) des Bauer auf weniger als 40 Energiepunkte gesunken ist. Ansonsten gibt sie false zurück. Teste deine Methode an den unterschiedlichen Bauern.

Parameter

Viele Methoden benötige zusätzliche Informationen, um korrekt arbeiten zu können. Du hast z.B. schon die Methoden pruefe oder istAuf kennen gelernt. Beide erwarten einen Text als Parameter. Ihr Methodenkopf sieht folgendermaßen aus:

public boolean istAuf(String name) {…}

public int pruefe(String name) {…}

Man gibt also in der runden Klammer hinter dem Methodennamen die Parameter an. Dabei wird zuerst der Typ genannt (hier String) und dann der Name des Parameters (hier name). Diesen Parameter kann man dann überall innerhalb der Methode nutzen. Dabei wird nur noch der Name angegeben und nicht mehr der Typ.

Variablentypen: Du hast nun bereits mit verschiedenen Typen zu tun gehabt. Während wir Menschen Zahlen, Texte und Wahrheitswerte mit einem Blick unterscheiden können, sind Computer "dumme Maschinen", die das tatsächlich nicht so einfach können. Daher müssen wir dem Computerprogramm immer mitteilen, welche Art von Daten er vor sich sieht. Die wichtigsten Typen sind die folgenden:

boolean: Wahrheitswerte - nur true oder false möglich.

String: Beliebiger Text - muss zwischen doppelten Anführungszeichen stehen, z. B.: "Informatik ist cool!"

int: Ganzzahl zwischen -2.147.483.648 und 2.147.483.647

(A6) Besitztümer

Der Bauer kann Gegenstände mit sich herumtragen. Mit getAnzahl(String name) kann man testen, wie viele Gegenstände eines bestimmten Typs er bei sich hat. Untersuche die Methode hatGegenstand des AB5_Bauer. Welchen Parameter erwartet diese Methode? Teste die Methode an den Bauern. Wie wirkt es sich aus, dass die Methode einen Parameter hat? Wo wird dieser Parameter innerhalb der Methode genutzt?

Tipp: Untersuche, ob die Bauern Tomaten mit sich herumtragen.

(A7) Gießbereit

Implementiere eine Methode boolean kannGiessen(), die testet, ob der Bauer eine Gießkanne ("Giesskanne") hat und sie gefüllt ist, d.h. das Prüfen der Gießkanne einen Wert größer als 0 ergibt.

Hinweis: Hier musst du noch keinen eigenen Parameter definieren, sondern siehst wie man eine Methode mit Parameter nutzt.

(A8) Blick nach links

Implementiere eine Methode boolean istLinks(String name), die testet, ob links vom Bauern ein bestimmter Gegenstand ist. Der Name dieses Gegenstandes ist der Parameter der Methode. Da der Bauer nur die Methode istVorne(String name) kennt, musst du den Bauern zunächst nach links drehen. Am Ende soll der Bauer wieder so stehen wie am Anfang.

Hinweis: Befehle nach der return Anweisung werden nicht mehr ausgeführt. An welcher Stelle muss man den Bauern wieder zurückdrehen?

(A9) Positionslauf

Implementiere eine Methode laufeBisY(int y), die den Bauern so lange vorwärts gehen lässt, wie die durch den Parameter angegebene y-Koordinate (getY()) noch nicht erreicht ist. Du kannst davon ausgehen, dass die angegebene y-Koordinate vor dem Bauern liegt und er sich dafür nicht drehen muss. Teste deine Methode. Welche Art von Parameter erwartet sie?

Für Experten: Drehe den Bauer zusätzlich zunächst in die richtige Richtung.

Leveltest 5: Gemüsebauernprüfung

Aufgabe: Dein Bauer ist bereit: Er hat sich für die Gemüsebauerprüfung angemeldet. Seine Aufgabe ist es, Tomaten anzubauen und mindestens 20 Tomaten zu ernten. Je schneller er diese Aufgabe erledigt, desto besser.Er hat am Anfang vier Tomaten. Diese kann er pflanzen, indem er sie auf einem leeren Ackerfeld ablegt. Danach muss er fleißig gießen, bis die Tomaten herangereift sind. Sind sie schön rot, kann er sie ernten. Tomatenpflanzen produzieren bei ausreichender Wasserversorgung immer wieder neue Tomaten, es müssen keine neuen gepflanzt werden.

So viel Arbeit ist natürlich anstrengend. Daher muss der Bauer immer mal wieder eine Vesperpause in seinem Haus machen, um seine Energiereserven aufzufüllen.

Hilfreiche Methoden

void ablegen(String name) - Der Bauer legt einen Gegenstand aus seinem Inventar ab. Tomaten werden dabei gepflanzt.

void aufnehmen() - Der Bauer hebt einen Gegenstand vom Boden auf.

void ernte(String name) - Der Bauer kann "Tomate" und "Korn" ernten, wenn es reif ist.

void benutze(String name) - Der angegebene Gegenstand wird benutzt. Benutzt man eine Gießkanne (benutze("Giesskanne") vor einem Wasserfeld, wird sie gefüllt. Benutzt man sie auf einem Acker, dann gießt man den Boden damit. Hinweis: Eine volle Gießkanne reicht nicht für vier Pflanzen hintereinander.

void vesperpause() - Der Bauer macht eine Pause im Haus. Er muss dazu direkt vor der Tür zum Haus stehen.

int getAnzahl(String name) - Gibt die Anzahl der Gegenstände vom Typ name zurück, die der Bauer mit sich herumträgt.

Tipps

Vorschlag, wie der Algorithmus ablaufen könnte

Schnapp dir gleich zu Beginn die Gießkanne neben dir.

Laufe direkt bis runter zum Feld.

Laufe nach links und pflanze dabei auf allen 4 Feldern die Tomaten (Tipp: Schleife).

Wenn du nun links unter dem Brunnen stehst, bietet sich eine große Schleife an (bis du 20 Tomaten hast), da jetzt immer nur noch folgende Dinge wiederholt werden müssen:

Fülle die Gießkanne und laufe anschließend nach rechts über die 4 Felder zurück. Gieße dabei (wenn möglich) und ernte dabei (wenn möglich).

Gehe zurück zum Stall und mache eine Vesperpause.

Gehe runter zum rechten Brunnen und fülle die Gießkanne.

Gehe noch eins runter zum Feld und laufe anschließend nach links über die 4 Felder. Gieße dabei (wenn möglich) und ernte dabei (wenn möglich).

Nun bist du wieder am Anfang der großen Schleife unter dem linken Brunnen und alles wiederholt sich

<<< Zurück zu Level 4 AB05 Weiter zu Level 6 >>>