Skip to content

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;
}   
            
                    
        
23Windrad

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.

23HalloWelt
    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)

zaehlschleifenF1

Fehler: cannot find symbol - variable anz

b)

zaehlschleifenF2

Fehler: variable anz might not have been initialized

c)

zaehlschleifenF3

Das Programm läuft in einer Endlosschleife.