Lernpfad:Lerntheke Marsrover/26: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „{{Karte}} {{Inhalt/Lerntheke}}“)
 
Keine Bearbeitungszusammenfassung
 
(5 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

Wiederholungen II

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 );
Greenfoot Rover.png
Arbeitsauftrag

Ü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();
    }
}
Kartendaten:
".\n.\n.\n.\n.........RH"
Nachgesteuerte Schleife
public void act() {
    do {
        setzeMarke();
        fahre();
    } while( !huegelVorhanden("vorne") );
}
Vergleich der Schleifenarten

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).

Greenfoot Rover.png
Arbeitsauftrag

Ü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();
        }
    }
}
Icon Info.png
Der Modulo-Operator a%b berechnet den Rest, wenn man a durch b teilt. Zum Beispiel gilt 5%3==2.
Greenfoot Rover.png
Arbeitsauftrag

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.

Endlose vorgesteuerte Schleife

Zum Beispiel:

while( true ) {
    fahre();
}

oder

int zahl i = 100;
while( i > 0 ) {
    fahre();
    i += 1;
}
Endlose nachgesteuerte Schleife

Zum Beispiel:

do {
    fahre();
} while( true );

oder

int zahl i = 100;
do {
    fahre();
    i += 1;
} while( i > 0 );
Endlose Zählschleife

Zum Beispiel:

for( int i = 1; i > 0; i+=1 ) {
    fahre();
}

oder

for( int i = 0; i != 99; i += 2 ) {
    fahre();
}