9.2 Die do-while-Schleife
 
Alternative Schleifen lassen sich in Java auf verschiedene Weisen realisieren. So gibt es neben der gerade kennen gelernten for- auch while und do-while - Schleifen. Im Prinzip würde es reichen nur eine Variante zu kennen. Die Implementierungen werden aber oft einfacher und damit auch leichter zu lesen, wenn man dem Problem angepasst, die eine oder andere Alternative einer Schleife benutzt.  Zunächst aber wollen wir zeigen, wie wir unsere Aufgabe, das Sechseck zeichnen zu lassen auch mit einer sog. do-while-Schleife lösen können und stellen dazu eine weitere Methode unserer Turtle vorstellen.
 
getOrientation() Die Turtledokumenation zeigt uns, dass es eine Methode gibt, um die Orientierung einer Turtle zu erhalten:

 
  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 wird. Die Entscheidung am Ende des Schleifenkörpers erfolgt so, dass der Wert einer Bedingung 'wahr' sein muss um die Schleife weiter fortzuführen. 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 9.3 Die while-Schleife
zur Startseite www.pohlig.de  (C) MPohlig 2003