8.581
Bearbeitungen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Karte}} | {{Karte|Hilfe=8,11}} | ||
Neben der <code>while</code>-Schleife gibt es noch zwei andere Schleifen-Strukturen in {{Java}}: Die <code>do</code>-<code>while</code>-Schleife und die <code>for</code>-Schleife. | |||
Bei der <code>while</code>-Schleife steht die ''Bedingung'' ganz am Anfang, im Schleifenkopf. Daher nennt man sie auch ''kopfgesteuerte Schleife''. | |||
<syntaxhighlight lang="Java"> | |||
while( Bedingung ) { | |||
// Befehle | |||
} | |||
</syntaxhighlight> | |||
Bei der <code>do</code>-<code>while</code>-Schleife steht die Bedingung am Ende, nach dem Schleifenrumpf. Daher nennt man sie ''nachgesteuerte Schleife''. | |||
<syntaxhighlight lang="Java"> | |||
do { | |||
// Befehle | |||
} while( Bedingung ); | |||
</syntaxhighlight> | |||
{{Aufgabe:Start|Icon=Greenfoot Rover.png}} | |||
Übernimm die gezeigte ''kopfgesteuerte Schleife'' in den Rover und führe sie einmal auf der Karte unten aus. Ändere sie dann in eine ''nachgesteuerte Schleife'' um und beobachte wieder, was passiert. | |||
Versuche zu beschrieben, was der Unterschied zwischen den beiden Schleifenarten ist. | |||
<syntaxhighlight lang="java"> | |||
public void act() { | |||
while( !huegelVorhanden("vorne") ) { | |||
setzeMarke(); | |||
fahre(); | |||
} | |||
} | |||
</syntaxhighlight> | |||
{{Aufgabe:End}} | |||
{{Roverkarte|.\n.\n.\n.\n.........RH}} | |||
{{Lösung:Start|Nachgesteuerte Schleife}} | |||
<syntaxhighlight lang="java"> | |||
public void act() { | |||
do { | |||
setzeMarke(); | |||
fahre(); | |||
} while( !huegelVorhanden("vorne") ); | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
{{Lösung:Start|Vergleich der Schleifenarten}} | |||
Die nachgesteuerte Schleife wird immer ''mindestens einmal'' ausgeführt, auch, wenn die Bedingung sofort <code>false</code> ist. Die kopfgesteuerte Schleife wird ggf. gar nicht ausgeführt. | |||
{{Lösung:End}} | |||
Die <code>for</code>-Schleife wird vor allem dann benutzt, wenn ein Programmteil eine bestimmte Anzahl Male wiederholt werden soll. Daher nennt man sie ''Zählschleife''. | |||
<syntaxhighlight lang="Java"> | |||
for( int i = 0; i < 100; i += 1 ) { | |||
// Befehle | |||
} | |||
</syntaxhighlight> | |||
In der Zählschleife wird zuerst eine ''Zählvariable'' (hier i) ''deklariert''. Dann wird eine ''Bedingung'' festgelegt, bis wann die Schleife laufen soll (bis die Bedingung <code>false</code> ist). Und schließlich wird die ''Schrittweite'' bestimmt, wie sich die Zählvariable nach jedem Durchlauf verändern soll (hier erhöht sich i immer um 1). | |||
{{Aufgabe:Start|Icon=Greenfoot Rover.png}} | |||
Übernimm die gezeigte Zählschleife in den Rover und probiere sie auf einer Zufallskarte aus. Probiere dann andere Werte für den Initialwert der Zählvariablen, die Schleifenbedingung und die Schrittweite aus. | |||
<syntaxhighlight lang="Java"> | |||
public void act() { | |||
for( int i = 0; i < 8; i += 1 ) { | |||
fahre(); | |||
if( i%2 == 0 ) { | |||
setzeMarke(); | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
{{Aufgabe:End}} | |||
{{Hinweis|Der Modulo-Operator <code>a%b</code> berechnet den Rest, wenn man <code>a</code> durch <code>b</code> teilt. Zum Beispiel gilt <code>5%3{{=}}{{=}}2</code>.}} | |||
{{Aufgabe:Start|Icon=Greenfoot Rover.png}} | |||
'''Achtung:''' Machst du bei einer Wiederholung einen Fehler, dann kann es zu einer ''Endlosschleife'' kommen (also einer Schleife, die niemals anhält). | |||
Programmiere mit jeder der drei Schleifenarten eine Endlosschleife. | |||
{{Aufgabe:End}} | |||
{{Lösung:Start|Endlose vorgesteuerte Schleife}} | |||
Zum Beispiel: | |||
<syntaxhighlight lang="Java"> | |||
while( true ) { | |||
fahre(); | |||
} | |||
</syntaxhighlight> | |||
oder | |||
<syntaxhighlight lang="Java"> | |||
int zahl i = 100; | |||
while( i > 0 ) { | |||
fahre(); | |||
i += 1; | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
{{Lösung:Start|Endlose nachgesteuerte Schleife}} | |||
Zum Beispiel: | |||
<syntaxhighlight lang="Java"> | |||
do { | |||
fahre(); | |||
} while( true ); | |||
</syntaxhighlight> | |||
oder | |||
<syntaxhighlight lang="Java"> | |||
int zahl i = 100; | |||
do { | |||
fahre(); | |||
i += 1; | |||
} while( i > 0 ); | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
{{Lösung:Start|Endlose Zählschleife}} | |||
Zum Beispiel: | |||
<syntaxhighlight lang="Java"> | |||
for( int i = 1; i > 0; i+=1 ) { | |||
fahre(); | |||
} | |||
</syntaxhighlight> | |||
oder | |||
<syntaxhighlight lang="Java"> | |||
for( int i = 0; i != 99; i += 2 ) { | |||
fahre(); | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
{{Inhalt/Lerntheke}} | {{Inhalt/Lerntheke}} |
Bearbeitungen