Lernpfad:Lerntheke Marsrover/26: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(3 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}} |
Aktuelle Version vom 17. November 2020, 09:18 Uhr
Neben der while
-Schleife gibt es noch zwei andere Schleifen-Strukturen in Java: Die do
-while
-Schleife und die for
-Schleife.
Bei der while
-Schleife steht die Bedingung ganz am Anfang, im Schleifenkopf. Daher nennt man sie auch kopfgesteuerte Schleife.
while( Bedingung ) {
// Befehle
}
Bei der do
-while
-Schleife steht die Bedingung am Ende, nach dem Schleifenrumpf. Daher nennt man sie nachgesteuerte Schleife.
do {
// Befehle
} while( Bedingung );
Ü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.
public void act() {
while( !huegelVorhanden("vorne") ) {
setzeMarke();
fahre();
}
}
".\n.\n.\n.\n.........RH"
public void act() {
do {
setzeMarke();
fahre();
} while( !huegelVorhanden("vorne") );
}
Die nachgesteuerte Schleife wird immer mindestens einmal ausgeführt, auch, wenn die Bedingung sofort false
ist. Die kopfgesteuerte Schleife wird ggf. gar nicht ausgeführt.
Die for
-Schleife wird vor allem dann benutzt, wenn ein Programmteil eine bestimmte Anzahl Male wiederholt werden soll. Daher nennt man sie Zählschleife.
for( int i = 0; i < 100; i += 1 ) {
// Befehle
}
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 false
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).
Ü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.
public void act() {
for( int i = 0; i < 8; i += 1 ) {
fahre();
if( i%2 == 0 ) {
setzeMarke();
}
}
}
a%b
berechnet den Rest, wenn man a
durch b
teilt. Zum Beispiel gilt 5%3==2
.
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.
Zum Beispiel:
while( true ) {
fahre();
}
oder
int zahl i = 100;
while( i > 0 ) {
fahre();
i += 1;
}
Zum Beispiel:
do {
fahre();
} while( true );
oder
int zahl i = 100;
do {
fahre();
i += 1;
} while( i > 0 );
Zum Beispiel:
for( int i = 1; i > 0; i+=1 ) {
fahre();
}
oder
for( int i = 0; i != 99; i += 2 ) {
fahre();
}
Das ist Greenfoot | Der Mars-Rover | Die Welt des Mars-Rover | Das ist Java | Die Rover-Arena | Greenfoot benutzen | Java Syntax | Variablen | Methoden | Bedingte Anweisungen | Schleifen | Objekte | Arrays | Die Fähigkeiten des Rovers | Steine analysieren I | Steine analysieren II | Strukturiertes programmieren | Programme strukturieren I | Programme strukturieren II | Fallunterscheidungen I | Anfragen | Fallunterscheidungen II | Variablen | Objektvariablen | Wiederholungen I | Wiederholungen II | Rover-Liebe | Steine analysieren III | Gefangen im Labyrinth I | Marken-Maler | Fleißige Rover | Gefangen im Labyrinth II | In der Rover-Arena | Parameter