Arbeitsblätter für JavaKara

Rückgabewerte (Lösungen)

Autor: Horst Gierhardt



  1. 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)

  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
    
    
  3. 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.

  4. 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