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