Arbeitsblätter für JavaKara
Zum Ersten: Play it again, Kara!
Autor: Horst Gierhardt
Aufgabe:
Version 1: Kara steht vor einer Reihe von Kleeblättern, an deren Ende ein Baum steht. Die Kleeblatt"-reihe kann Lücken haben. Kara soll alle Kleeblätter aufsammeln.
Version 2: Kara soll die Kleeblattreihe invertieren, d.h. wenn er auf einem Kleeblatt steht, soll er es aufnehmen; wenn er keines vorfindet, soll er eines ablegen.
Das Neue: Kara soll in Abhängigkeit von einer Bedingung etwas wiederholt ausführen. Hier: Solange kein Baum vor ihm steht, soll er etwas tun, nämlich Kleeblätter sammeln.
import JavaKaraProgram; public class KleeblattSammeln extends JavaKaraProgram { // Anfang von KleeblattSammeln public void myProgram() { // Anfang von myProgram if (kara.onLeaf()) { kara.removeLeaf(); } while (!kara.treeFront()) { kara.move(); if (kara.onLeaf()) { kara.removeLeaf(); } } } // Ende von myProgram } // Ende von KleeblattSammeln
Erläuterungen:
- Die Syntax der while-Schleife:
while ( Bedingung ) { Auszufuehrende Methoden, wenn ja }
Der Ablauf: Zuerst wird die Bedingung ausgewertet. Wenn das Ergebnis ,,ja'' lautet, werden die Methoden, die in { } eingeschlossen sind, ausgeführt. Nach der Ausführung wird die Bedingung wieder ausgewertet, usw. Wird die Bedingung nicht erfüllt, macht das Programm mit der nächsten Anweisung nach dem in { } eingeschlossenen Block weiter.Wird die Bedingung schon beim ersten Mal nicht erfüllt, wird der Anweisungsblock kein einziges Mal ausgeführt.
- Von der while-Schleife gibt es eine seltener genutzte Form,
die do-Schleife. Die Syntax der do-Schleife:
do { Auszufuehrende Methoden } while ( Bedingung );
Der Unterschied zwischen den beiden Schleifenformen besteht im Zeitpunkt der Prü"-fung der Bedingung. Bei der do-Schleife findet die Prüfung am Ende der Schleife statt. Sie wird also mindestens einmal durchlaufen. Das kann gefährlich sein. Beachte das Semikolon am Ende der Zeile mit while!
Fragen:
- Wozu dient die folgende Zeile, die vor der while-Schleife
steht? Für welche Situation ist sie notwendig?
if (kara.onLeaf()) { kara.removeLeaf(); }
- Die folgende Lösung ist für eine bestimmte Situation nicht korrekt. Welche?
import JavaKaraProgram; public class KleeblattSammeln extends JavaKaraProgram { // Anfang von KleeblattSammeln public void myProgram() { // Anfang von myProgram while (!kara.treeFront()) { if (kara.onLeaf()) { kara.removeLeaf(); } kara.move(); } } // Ende von myProgram } // Ende von KleeblattSammeln
Verbessere das Programm durch Einfügen einer zusätzlichen if-Anweisung. - Was ist hier falsch?
import JavaKaraProgram; public class KleeblattSammeln extends JavaKaraProgram { // Anfang von KleeblattSammeln public void myProgram() { // Anfang von myProgram while (!kara.treeFront() && kara.onLeaf()) { kara.removeLeaf(); kara.move(); } } // Ende von myProgram } // Ende von KleeblattSammeln
- Schreibe das Programm mit einer do-Schleife.
- while (true) { kara.turnLeft(); } Was passiert?
- while (!kara.treeFront()); { kara.move(); } Was passiert und warum?