vor()

Werbung
Folge 6
JAVA
WHILE-Schleife
6.1 Schleifen
Schleifen dienen dazu, bestimmte Anweisungen immer wieder abzuarbeiten.
Zu einer Schleife gehören die Schleifenbedingung und der Rumpf. Die
Schleifenbedingung entscheidet darüber, unter welcher Bedingung die Wiederholung
ausgeführt wird. Sie muss ein logischer (Boolescher) Ausdruck sein. In Abhängigkeit
von der Schleifenbedingung kann der Rumpf mehrmals ausgeführt werden. Dazu wird
bei jedem Schleifendurchgang die Schleifenbedingung geprüft. Das Ergebnis
entscheidet, ob der Rumpf ein weiteres Mal durchlaufen (true) oder die Schleife
beendet wird (false).
6.2 Die WHILE-Schleife
Die WHILE-Schleife ist eine abweisende Schleife, da sie vor jedem Schleifeneintritt die
Schleifenbedingung prüft:
←
while(vornFrei())
{
vor();
}
Schleifenbedingung
Rumpf
Vor jedem Schleifendurchgang wird der Ausdruck neu ausgewertet und ist das
Ergebnis true, so wird der Rumpf ausgeführt. Die Schleife ist beendet, wenn das
Ergebnis false ist. Ist die Bedingung schon vor dem ersten Eintritt in den Rumpf nicht
wahr, so wird der Rumpf erst gar nicht durchlaufen. Der Typ der Bedingung muss
boolean sein.
6.3 Syntax der WHILE-Schleife
Die WHILE-Schleife, ist eine zusammengesetzte Anweisung!
Nach dem Schlüsselwort while steht in runden Klammern ein boolescher Ausdruck,
die so genannte Schleifenbedingung. Anschließend folgt der Rumpf mit den
Anweisungen die evtl. wiederholt ausgeführt werden müssen.
while
(
boolescher
Ausdruck
)
Anweisung/en
Syntaxdiagramm: while-Schleife
JAVA Folge 6, WHILE-Schleife_V1.doc
1/5
6.4 Beispiele
Beispiel 1
Der Hamster soll so lange geradeaus laufen, bis er an eine Wand stößt.
Zunächst wird der Testbefehl vornFrei() 01
ausgewertet. Er liefert den Wert true. Also 02
03
ist die Schleifenbedingung erfüllt.
04
05
D.h. als nächstes wird die Anweisung
06
vor() im Rumpf ausgeführt. Der Hamster 07
hüpft eine Kachel nach vorne. Danach
wird die Schleifen-bedingung erneut
überprüft. Der Testbefehl vornFrei()
liefert wieder den Wert true, so dass der
vor()-Befehl ein zweites Mal ausgeführt
wird.
void main()
{
while (vornFrei())
{
vor();
}
}
Dies geschieht so lang, bis der Hamster vor
der Mauer steht (rechtes Territorium). Da
der Hamster jetzt vor der Mauer steht
liefert der Testbefehl den Wert false. Damit
ist die WHILE-Schleife und – weil es die
einzige
Anweisung
des
Hamsterprogramms war – auch das
gesamte Hamsterprogramm beendet.
JAVA Folge 6, WHILE-Schleife_V1.doc
2/5
Beispiel 2
Der Hamster soll in die gegenüberliegende Ecke laufen und dann anhalten. Dabei soll
er alle Körner einsammeln. Auf den einzelnen Kacheln kann eine beliebige Anzahl
Körner liegen. Das Programm soll für beliebig große,
rechteckige Territorien
funktionieren.
Das Hauptprogramm ist simpel. Einziger
kleiner Trick ist der Beginn mit der Prozedur
sammle() . Er ist notwendig, damit die
Körner auf der ersten Kachel auch aufgenommen werden.
Die Prozedur: sammle() sorgt dafür, dass
der Hamster alle Körner von einer Kachel
aufnimmt.
Die
Prozedur:
laufeUndSammle()
bewegt den Hamster solange vorwärts bis
er auf eine Mauer trifft. Nebenbei sammelt
er noch die Körner ein.
Bei der Prozedur laufeUndSammle()
handelt es sich eigentlich um eine
geschachtelte Schleife! (Schleife in der Schleife)
Denn sammle() ist auch eine Schleife.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void main()
{
sammle();
laufeUndSammle();
linksUm();
laufeUndSammle();
}
void sammle()
{
while (kornDa())
{
nimm();
}
}
void laufeUndSammle()
{
while (vornFrei())
{
vor();
sammle();
}
}
----------------------------Als geschachtelte Schleife sieht das dann
so aus:
JAVA Folge 6, WHILE-Schleife_V1.doc
void laufeUndSammle()
{
while (vornFrei())
{
vor();
while (kornDa())
{
nimm();
}
}
}
3/5
Beispiel 3 Kehrwoche
Der Hamster hat Kehrwoche. Er muss auf einem rechteckigen Schulhof beliebiger
Größe alle Körner auffegen. Er fängt immer in der unteren linken Ecke an und blickt
dabei nach Osten.
Tippen Sie das Programm ein und 01
versuchen Sie die Lösung nachzu- 02
03
vollziehen.
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
JAVA Folge 6, WHILE-Schleife_V1.doc
void main()
{
vorZurueck();
rechtsUm();
while (vornFrei())
{
vor();
rechtsUm();
vorZurueck();
rechtsUm();
}
}
void vorZurueck()
{
reihe();
kehrt();
zurueck();
}
void reihe()
{
sammle();
while (vornFrei())
{
vor();
sammle();
}
}
void zurueck()
{
while (vornFrei())
{
vor();
}
}
void sammle()
{
while (kornDa())
{
nimm();
}
}
void rechtsUm() { kehrt();
linksUm(); }
void kehrt() { linksUm();
linksUm(); }
4/5
6.5 (Vorsicht Falle) Endlosschleife
Schauen Sie sich folgendes Programm an:
01
02
Die Ausführung des Programms wird 03
niemals enden. Die Schleifenbedingung 04
05
liefert immer den Wert: true.
06
07
Das Programm wird endlos fortgesetzt.
08
Derartige Endlosprogramme sind im
allgemeinen fehlerhaft, es sei denn, in der
Aufgabenstellung wird dies explizit erlaubt.
void main()
{
while (vornFrei())
{
vor();
linksUm();
}
}
Programmieren Sie diese Schleife und
testen Sie sie.
6.6 Die DO / WHILE-Schleife
Dieser Schleifentyp ist eine annehmende Schleife, da die Schleifenbedingung erst
nach jedem Schleifendurchgang geprüft wird. Bevor es zum ersten Test kommt, ist der
Rumpf also schon einmal durchlaufen.
6.7 Die Syntax der DO / WHILE-Schleife
Dem Schlüsselwort do folgt der Rumpf mit den Anweisungen. Danach folgt das
Schlüsselwort while . Anschließend folgt in runden Klammern ein boolescher
Ausdruck (Schleifenbedingung). Abgeschlossen wird die DO / WHILE-Schleife mit
einem Semikolon!
do
Anweisung/en
while
(
boolescher
Ausdruck
)
;
Syntaxdiagramm: do/while-Schleife
Als erstes wird die Anweisung nimm() im
Rumpf ausgeführt. Erst danach wird der
Testbefehl kornDa() ausgewertet und
entschieden ob die Schleifenbedingung
erfüllt ist und wie oft die Anweisung im
Rumpf ausgeführt wird.
JAVA Folge 6, WHILE-Schleife_V1.doc
void main()
{
do
{
nimm();
}
while(kornDa());
}
5/5
Herunterladen