# while()

Sollen in einer Funktion oder einer Aktion Anweisungen mehrmals abgearbeitet werden, kann dies mit folgender Schleife verwirklicht werden:

`

    while(Bedinung)
    	{
    	anweisungen;
    	}

`

Der Anweisungsblock wird so lange wiederholt, wie die Bedingung wahr ist. Jedes Mal wenn der Anweisungsblock abgearbeitet worden ist, wird die Bedingung auf "wahr" geprüft. Und wenn sie noch "wahr" ist, wird der Anweisungsblock ein weiteres Mal abgearbeitet. Ist die Bedinung schon vor dem Aufrufen der Schleife falsch, wird der Anweisungsblock nicht abgearbeitet.

Folgende Bedingungen sind möglich:

`while(1)` | // wahr, dies ist eine endlosschleife
`while(x == y)` | // wahr, wenn x gleich y
`while(x != y)` | // wahr, wenn x ungleich y
`while(x > y)` | // wahr, wenn x grösser y
`while(x >= y)` | // wahr, wenn x grösser oder gleich y
`while(x < y)` | // wahr, wenn x kleier y
`while(x <= y)` | // wahr, wenn x kleiner oder gleich y

Es ist auch möglich mehrere Bedingungen zu verknüpfen. Jede dieser Bedingungen werden in eigenen Klammern dargestellt.

Nicht nur Variable können durch Bedinungen überprüft werden, sondern auch Flags, deren Werte ja nur an (wahr) oder aus (falsch) sind. Für diese beiden Formen gibt es noch zwei weitere Bedingungsformen:

`while(my.flag1 || my.flag2)` | // wahr, wenn einer der beiden Flags an(wahr) sind. (oder)
`while(my.flag1 && my.flag2)` | // wahr, wenn beide Flags an(wahr) sind. (und)
`while((x==5) || (y==5))` | // wahr, wenn x gleich 5 oder y gleich 5
`while((x==5) && (y==5))` | // wahr, wenn x gleich 5 und y gleich 5

Desweiteren können auch Pointer für Bedingungen genutzt werden, wie z.B:

`

    while(my == null)
    	{
    	wait(1);
    	}

`

Bei diesem Beispiel wird solange gewartet bis my einer Entity zugewiesen wird.

Die While-Schleife hat noch zwei weitere optionale Anweisungen. Zum einen die Continue-Anweisung, welche die Schleife veranlasst wieder zum Anfang zu springen.

`

    while(Bedinung1)
    	{
    	anweisungsblock1;
    	if (Bedinung2)
    		{continue;}
    	anweisungsblock2;
    	}

`

In diesem Beispiel wird der Anweisungsblock2 nicht abgearbeitet wenn Bedinung2 wahr ist. Ist dies der Fall, wird wieder zum Anfang gesprungen. Zuvor wird aber die Bedingung1 geprüft.

Zum anderen gibt es noch die Break-Anweisung, welche die Schleife sofort verlässt.

`

    while(Bedinung1)
    	{
    	anweisungsblock1;
    	if (Bedinung2)
    		{break;}
    	anweisungsblock2;
    	}

` Ist die Bedingung2 wahr, wird die Schleife sofort verlassen.