2.4 Zählschleifen
In manchen Situationen kann die Bedingung für eine Schleife nicht aus den Eigenschaften von Objekten abgeleitet werden. Bei der nebenstehenden Landschaft sollen sich die Blätter des Windrads 100 mal um 1° um sich selbst drehen. Es ist also schon von vornherein klar, wie oft die Schleife durchlaufen werden soll.
In diesen Fällen kann man auf eine Zählschleife: Hierfür benötigt man eine Zahl, die man beispielsweise bei jedem Schleifendurchlauf um 1 hochzählt. In der Bedingung wird angegeben, bis zu welchem Wert dies getan werden soll. Als Java-Code sähe dies so aus:
int anz = 0;
while( anz < 100 )
{
rotor1.dreheUmMittelpunkt(1);
rotor2.dreheUmMittelpunkt(1);
SGSystem.warte()
anz = anz + 1;
}

Bei der Zahl, die hochgezählt wird, handelt es sich um eine Variable. Sie wird in der ersten Zeile deklariert und mit dem Wert 0 initialisiert:
- Zuerst wird der Datentyp angegeben (in diesem Fall
int
für einen ganzzahligen Wert). - Dann folgt der Name der Variable (
anz
). - Mit dem Gleichheitszeichen wird der Variablen dann ein Wert zugewiesen (in diesem Fall
0
).
In der zweiten Zeile findet sich der Kopf der while
-Schleife mit der Bedingung. Die Zählvariable anz
wird an dieser Stelle ausgelesen. Das heißt: Bei Ausführung des Programms wird der Variablenname durch den in der Variablen gespeicherten Wert ersetzt. Beim ersten Aufruf der Schleife wäre dies 0 und die Bedingung 0 < 360
ist damit erfüllt.
Im Schleifenrumpf ab Zeile 4 können die Anweisungen angegeben werden, die wiederholt werden sollen.
Besonders wichtig ist die letzte Anweisung in Zeile 7: Um diese Zeile zu lesen, muss man auf der rechten Seite beginnen. Es wird wieder der Wert ausgelesen, der zur Zeit in anz
gespeichert ist. Dieser wird dann mit + 1
um eins erhöht. Anschließend wird das Ergebnis mit dem Zuweisungsoperator = wieder in anz
gespeichert. Nach der Ausführung der Anweisung in Zeile 5 ist der Wert von anz
also um 1
erhöht.
Würde man diese Anweisung vergessen, könnte die Schleife niemals enden, da sich der Wert von anz
nicht verändern würde und die Bedingung in Zeile 2 immer erfüllt wäre. Diese Endlosschleifen sollte man auf jeden Fall vermeiden.
Hinweis
anz = anz + 1;
kann auch abgekürzt werden, da man diese Anweisung häufig braucht: anz++;
Hinweis
Mit for
-Schleifen lassen sich Zählschleifen mit weniger Anweisungen erstellen. Sie werden später vorgestellt.
Aufgaben
1. Hallo Welt
Nebenstehend siehst du eine Animation, bei der sich der Mond um die Erde dreht. Zusätzlich dreht sich die Erde. Den Quelltext der zugehörigen Methode dreheMond()
ist unten zu sehen.
Analysiere die Methode, indem du sie zeilenweise kommentierst.

public void dreheMond()
{
int zeit = 0;
while(zeit < 360)
{
erde.dreheUmMittelpunkt(-1);
mond.dreheUmPunkt(1, erde.gibMittelpunktX(), erde.gibMittelpunktY());
SGSystem.warte();
zeit = zeit + 1;
}
}
2. Fehlerteufel
Bei den folgenden Quelltexten hat sich jeweils ein Fehler eingeschlichen. Beschreibe den Fehler. Dabei kann dir die Fehlermeldung helfen.
a)

Fehler: cannot find symbol - variable anz
b)

Fehler: variable anz might not have been initialized
c)

Das Programm läuft in einer Endlosschleife.