Informatik

Fußgesteuerte Schleifen

Manchmal soll der Rumpf mindestens einmal laufen, bevor überhaupt entschieden werden kann, ob es weitergeht. Dafür gibt es die fußgesteuerte Schleife: Die Bedingung steht am Ende.

Der Unterschied im Flussdiagramm

Kopfgesteuert – der Rumpf kann übersprungen werden:

flowchart TD
    S([Start]) --> B{Bedingung?}
    B -- ja --> R[Rumpf]
    R --> B
    B -- nein --> E([Ende])

Fußgesteuert – der Rumpf läuft garantiert mindestens einmal:

flowchart TD
    S([Start]) --> R[Rumpf]
    R --> B{Bedingung?}
    B -- ja --> R
    B -- nein --> E([Ende])

Die do-while-Schleife

do {
    // Schleifenrumpf
} while (Bedingung);
  • Der Rumpf läuft immer mindestens einmal.
  • Hinter der Bedingung steht hier ein Semikolon – anders als bei while und for.
  • Die Variable eingabe muss vor der Schleife deklariert werden, sonst kennt sie das while im Fuß nicht.

Der Unterschied in Zahlen

Beide Schleifen haben dieselbe Bedingung und denselben Rumpf. Sage voraus, wie oft jede von ihnen etwas ausgibt.

Auflösung
--- kopfgesteuert ---
--- fußgesteuert ---
Durchlauf 100

Die while-Schleife prüft zuerst: 100 ist nicht kleiner als 5, der Rumpf läuft gar nicht.

Die do-while-Schleife führt den Rumpf zuerst aus und prüft danach: also genau einmal.

Genau darin besteht der ganze Unterschied.

Wann nimmt man was?

Faustregel: Nimm do-while nur, wenn es sachlich richtig ist, dass der Rumpf mindestens einmal läuft.

Typische Fälle:

  • eine Eingabe abfragen und prüfen (man muss erst fragen, bevor man prüfen kann)
  • ein Spiel, das mindestens eine Runde dauert
  • ein Menü, das mindestens einmal angezeigt wird

In allen anderen Fällen ist while oder for die bessere Wahl.

Aufgabe 1: Zahlenraten

Schreibe ein Zahlenratespiel:

  1. Das Programm denkt sich eine Zufallszahl zwischen 1 und 100.
  2. Es fragt so lange nach einer Zahl, bis geraten wurde.
  3. Nach jeder Eingabe gibt es einen Hinweis aus: „zu klein“ oder „zu groß“.
  4. Am Ende meldet es, wie viele Versuche gebraucht wurden.

Entwickle zuerst ein Flussdiagramm auf Papier.

Tipp 1: Warum passt hier do-while?

Bevor du prüfen kannst, ob geraten wurde, musst du gefragt haben. Der Rumpf muss also mindestens einmal laufen.

Tipp 2: Das Gerüst
int geraten;
do {
    geraten = Integer.parseInt(IO.readln("Deine Zahl: "));
    versuche++;
    // hier den Hinweis ausgeben
} while (geraten != gesucht);
Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Aufgabe 2: Robuste Eingabe

In Kapitel 2 ist dein Programm abgestürzt, als jemand statt einer Zahl ein Wort eingegeben hat. Jetzt kannst du das abfangen – zumindest teilweise.

Schreibe ein Programm, das so lange nach einer Zahl zwischen 1 und 6 fragt, bis eine gültige Eingabe kommt. Nicht-Zahlen musst du dabei noch nicht behandeln, nur Zahlen außerhalb des Bereichs.

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Zusatzaufgabe

Baue das Zahlenraten zu einem Spiel für zwei Personen um:

Eine Person gibt zu Beginn die gesuchte Zahl ein, die andere rät. Damit die ratende Person nichts sieht, soll das Programm nach der Eingabe der gesuchten Zahl den Bildschirm leeren – dafür gibt es SystemTools.clearScreen().

Überlege außerdem: Wie viele Versuche braucht man im schlimmsten Fall, wenn man geschickt rät? Diese Frage führt direkt zur binären Suche, die du im Lernpfad Erweiterungen kennenlernst.


Selbsttest

Fußgesteuerte Schleifen

Teilbare URL erstellen

Abschnitte auswählen