4.8.2 Die do-while-Schleife
 
Alternative Wie am Anfang des Kapitel schon erwähnt, lassen sich Schleifen in Java auf verschiedene Weisen realisieren. Zwar würde es im Prinzip reichen, eine Variante zu kennen, die Implementierung wird aber oft einfacher und damit auch leichter zu lesen, wenn man sie dem Problem anpassen kann, und das bedeutet, auch dass man die Alternativen zur for-Schleife kennt und benutzt.  Zunächst geht es uns nicht um die Anpassung an ein Problem, sondern nur um das Kennen lernen der Alternativen. Wir also lernen, unsere Aufgabe, das Sechseck zeichnen zu lassen auch mit einer sog. do-while-Schleife lösen zu können. Gleichzeitig begegnet uns eine noch nicht benutzte Turtle-Methode, die wir hiermit vorstellen.
 
getOrientation() Ein Blick in die Turtle-Dokumentation bestätigt uns, dass es eine Methode gibt, die es uns erlaubt, die Orientierung eines Turtle-Objektes zu ermitteln:
 

 
 
t.getOrientation()
liefert also die Richtung, in der die Turtle t im Moment 'schaut'.
   
Download:
Sechseck2.java
public void zeichne() {

  do{

    t1.forward(100);

    t1.right(60);

  } while (t1.getOrientation() != 90);

}
Struktogramm Bevor wir uns mit der Syntax näher beschäftigen, werfen wir einen Blick auf das Struktogramm der do-while - Schleife. Sie zeigt, dass die Kontrolle über die Schleife an ihrem Ende steht. Also erst nach einem Schleifendurchgang wird entschieden, ob abgebrochen wird, oder der Schleifenkörper erneut durchlaufen werden soll. Zur Entscheidung, ob die Schleife erneut durchlaufen werden soll, dient ein Ausdruck am Ende des Schleifenkörpers. Ist der Wert dieses Ausdrucks 'wahr' wird die Schleife erneut ausgeführt, ansonsten wird mit dem Programm nach dem Schleifenkörper fortgefahren.. In unserem konkreten Fall verlangen wir, dass der Schleifenkörper solange weiter abgearbeitet wird, solange die Turtle nicht nach Norden schaut, der Orientierungswinkel also nicht 900 ist. Ein Vergleich mit dem Quelltext zeigt, dass man auf 'ungleich' mit != prüft.
 
Syntax do{

} while (<Bedingung>);
 
  Wird die Bedingung erfüllt (der hier stehende Ausdruck wird zu 'wahr' ausgewertet, wird der Schleifenkörper erneut durchlaufen. Die Tatsache, dass  die Kontrolle über die Schleife am Ende erfolgt, macht auch verständlich, dass eine do-while - Schleife grundsätzlich mindestens einmal durchlaufen wird.
 
Walter darf beim randomWalk-Tanz die Tanzfläche nicht verlassen Das nächste Beispiel zeigt eine andere Realisierung einer do-while - Schleife. Wie wir noch sehen werden, ist es sehr schwer und man müsste 'Verrenkungen' machen um dieses Beispiel in einer for-Schleife zu realisieren. Wir verlangen nämlich, dass 'der Turtle' Walter seinen Random-Walk aus dem letzten Kapitel nur solange tanzen darf, bis er an den Rand der Tanzfläche kommt. Dazu erinnern wir uns, dass das Feld, auf dem eine Turtle sich bewegen kann einem Koordinatensystem gleicht, dessen x- und y-Koordianten jeweils von -200 bis 200 reichen und eine Turtle sich nach ihrer Erzeugung standardmäßig im Koordinatenursprung befindet. Walter tanz also solange, bis die x- bzw. y-Koordinate des Ortes an dem er sich nach einem Tanzschritt befindet den Wert 200 oder -200 hat, oder anders ausgedrückt, er setzt seinen Tanz fort, wenn

(x > -200) && (x < 200) && (y > -200) && (y < 200)

wobei x und y die Variablen sind, in denen die x- bzw. y- Koordianten der Turtle Walter gespeichert sind und das Zeichen && das logische und bezeichnet.
 

 
public void zeichne() {

  double x,y;

  do{

    walter.forward(30*Math.random());

    walter.right(360*Math.random());

    x = walter.getX();

    y = walter.getY();

  } while (x >- 200 && x < 200 && y > -200 && y < 200);

}
Download:
RandomWalk. java
Selbstverständlich muss nach jedem Schritt die Koordinaten von Walter neu bestimmt werden, wir deklarieren dazu diese Variablen vor Eintritt in die Schleife und bestimmen nach jedem Schritt Walters mit den Methoden getX() und getY().

Dass eine Realisierung des Programms mit einer for-Schleife ist nicht nur umständlich, es entspräche auch keinem guten Programmierstil.
 
zu 4.8.3 Die while-Schleife
zur Startseite www.pohlig.de  (C) MPohlig 2004