Arbeitsblätter für JavaKara
Rückgabewerte (Lösungen)
Autor: Horst Gierhardt
- In der in JavaKara eingebauten Methodensammlung ,,fehlen'' einige Methoden.
Es gibt treeFront(), treeLeft() und treeRight() für Bäume, weil Kara
dafür Sensoren besitzt. Für Kleeblätter gibt es nur den Sensor onLeaf().
Wir können aber einen Sensor für Kleeblätter um Kara herum nachbilden, in dem
wir Kara dort hinschicken, mit onLeaf() nachsehen und zurück kehren lassen.
Das Ergebnis seiner Erkundung (true oder false) soll Kara zurück liefern.
Schreibe den Java-Code für leafLeft(), leafRight() und leafFront(). Findet Kara an der entsprechenden Stelle einen Baum, so soll false zurück geliefert werden.
(Lösung: siehe Aufgabe 2)
- Kara steht vor einem ihm fremden Wald, denn darin befinden sich keinerlei Kleeblätter.
Er erinnert sich an das Märchen von Hänsel und
Gretel und deren Strategie, im fremden Wald Brotkrümel zu streuen. Statt der Brotkrümel
legt er beim Hineingehen in den Wald Kleeblätter ab, um den Rückweg wieder finden zu können.
Er startet am Waldrand an einem Pilz, geht hinein und verirrt sich tatsächlich im Wald.
In dieser Situation befindet er sich nun beim Start des zu schreibenden Programmes.
Er soll also seiner gelegten Kleeblattspur entlang zurück zum Pilz laufen.
Es empfiehlt sich, die neu eingerichteten ,,Sensoren'' von Aufgabe 1 zu benutzen.
import JavaKaraProgram; public class HaenselUndGretel extends JavaKaraProgram { void turnAround() { kara.turnLeft(); kara.turnLeft(); } void moveBack() { turnAround(); kara.move(); turnAround(); } boolean leafFront() { boolean blatt=false; // damit false fuer Baum if (!kara.treeFront()) { kara.move(); blatt=kara.onLeaf(); moveBack(); } return blatt; } boolean leafLeft() { boolean blatt=false; // damit false fuer Baum if (!kara.treeLeft()) { kara.turnLeft(); kara.move(); blatt=kara.onLeaf(); moveBack(); kara.turnRight(); } return blatt; } public void myProgram() { while ( !kara.mushroomFront() ) { if (!leafFront()) { if (leafLeft()) { kara.turnLeft(); } else { kara.turnRight(); } } kara.move(); } tools.showMessage("Ich bin draussen!"); } // Ende von myProgram } // Ende von HaenselUndGretel
- Das vorherige Programm soll so modifiziert werden, dass er irgendwo am Waldrand gestartet war,
sich aber die Zahl 20 für die Anzahl der abgelegten Kleeblätter bis zum Verirren gemerkt hat.
Beim Ablegen des siebten Kleeblattes
hat er sich noch gemerkt, dass an dieser Stelle eine sehr schöne Lichtung mit vielen
wunderschönen Marienkäferinnen war.
Auf dem Rückweg soll er bei der schönen Lichtung einen Gruß ausgeben und dann weiter zurück
bis zu seinem Startpunkt am Waldrand gehen.
Lösung ähnlich wie oben, nur diesmal mit for-Schleife.
- Kara sieht vor sich eine freie Strecke. Links von dieser Strecke gehen ununterbrochen
verschieden lange Kleeblattspuren ab. Diese Kleeblattspuren sollen an seiner Laufstrecke
entlang nach rechts gespiegelt werden. Benutze zur Lösung des Problems eine Methode
spurlaenge(), die die Länge der aktuellen Spur links zurück liefert.
Die schon programmierten Methoden geheX() und legeX() dürfen/sollen
natürlich auch benutzt werden.
import JavaKaraProgram; public class Spiegeln extends JavaKaraProgram { // Anfang von Spiegeln void turnAround() { kara.turnLeft(); kara.turnLeft(); } void moveBack() { turnAround(); kara.move(); turnAround(); } void legeX(int anzahl) { for (int i=1; i<=anzahl; i++) { kara.putLeaf(); kara.move(); } } void geheX(int anzahl) { for (int i=1; i<=anzahl; i++) { kara.move(); } } boolean leafLeft() { boolean blatt=false; // damit false fuer Baum if (!kara.treeLeft()) { // jetzt muss man nachschauen kara.turnLeft(); kara.move(); blatt=kara.onLeaf(); moveBack(); kara.turnRight(); } return blatt; } int spurlaenge() { int zaehler=0; kara.turnLeft(); kara.move(); while (kara.onLeaf()) { zaehler++; kara.move(); } turnAround(); geheX(zaehler+1); kara.turnLeft(); return zaehler; } public void myProgram() { // Anfang von myProgram int anzahl=0; while (!leafLeft()) { kara.move(); } while (leafLeft()) { anzahl=spurlaenge(); kara.turnRight(); kara.move(); legeX(anzahl); turnAround(); geheX(anzahl+1); kara.turnRight(); kara.move(); } } // Ende von myProgram } // Ende von Spiegeln