Informatik

Zählschleifen

Bei fast allen while-Schleifen der letzten Lektion sah es gleich aus: eine Zählvariable vorher setzen, im Kopf vergleichen, im Rumpf erhöhen. Weil dieses Muster so häufig ist, gibt es dafür eine eigene Schreibweise – die Zählschleife oder for-Schleife.

Dasselbe in kurz

for (Initialisierung; Bedingung; Veränderung) {
    // Schleifenrumpf
}

Die drei Bestandteile jeder Schleife stehen jetzt alle im Kopf, getrennt durch Semikolons:

Teil im Beispiel wann ausgeführt
Initialisierung int j = 1 genau einmal, vor dem ersten Durchlauf
Bedingung j <= 5 vor jedem Durchlauf
Veränderung j++ nach jedem Durchlauf

Die Zählvariable wird meistens direkt im Kopf deklariert. Dann existiert sie nur innerhalb der Schleife.

Wann for, wann while?

Faustregel:

  • Weißt du vorher, wie oft wiederholt wird? → for
  • Hängt das Ende von etwas ab, das sich erst während der Schleife herausstellt? → while

Beide Schleifenarten können dasselbe. Die Wahl macht nur deinen Code lesbarer – aber das ist wichtig genug.

Entscheide für jede Situation, welche Schleifenart besser passt, und begründe kurz.

a) Alle Zahlen von 1 bis 100 ausgeben

b) So lange nach einem Passwort fragen, bis es stimmt

c) Die Buchstaben eines Wortes einzeln ausgeben

d) So lange verdoppeln, bis der Wert über eine Million steigt

Auflösung

a) for – die Anzahl steht fest.

b) while – wie oft gefragt wird, weiß man vorher nicht.

c) for – die Anzahl ergibt sich aus wort.length() und steht damit vor Beginn fest.

d) while – die Anzahl der Verdopplungen hängt vom Startwert ab und ist vorher nicht bekannt. (Man kann es mit for schreiben, aber es liest sich schlechter.)

Rückwärts und in Schritten

Sage voraus, was dieses Programm ausgibt. Achte genau auf den Kopf der Schleife.

Auflösung
3
6
9

Die Schleife läuft zehnmal, aber die Verzweigung im Rumpf lässt nur die durch 3 teilbaren Zahlen durch.

Über eine Zeichenkette laufen

Merke dir diesen Kopf – du wirst ihn hunderte Male schreiben:

for (int i = 0; i < wort.length(); i++)

Er beginnt bei 0 und läuft mit < bis kleiner als die Länge. Beides zusammen trifft genau die gültigen Positionen 0 bis length() - 1.

Schreibst du versehentlich <=, greifst du eine Stelle hinter das Ende – ein Laufzeitfehler. Dieser Fehler ist so verbreitet, dass er einen Namen hat: Zaunpfahlfehler (englisch off-by-one).

Aufgabe 1: Vokale zählen

Schreibe ein Programm, das ein Wort einliest und zählt, wie viele Vokale (a, e, i, o, u) darin vorkommen.

Erweiterung: Zähle auch, wie viele Konsonanten es sind.

Tipp 1: Ein Zeichen prüfen

Hol dir mit wort.charAt(i) das Zeichen an Position i und vergleiche es mit 'a', 'e', … – jeweils in einfachen Anführungszeichen, weil es ein char ist.

Tipp 2: Fünf Möglichkeiten in einer Bedingung
char z = wort.charAt(i);
if (z == 'a' || z == 'e' || z == 'i' || z == 'o' || z == 'u') {
Tipp 3: Groß- und Kleinschreibung

Wenn jemand „Informatik“ mit großem I eingibt, findet dein Test das große I nicht. Am einfachsten wandelst du das ganze Wort vorher um: wort = wort.toLowerCase();

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Aufgabe 2: Treppe zeichnen

Zeichne mit dem Stift eine Treppe aus sechs Stufen.

a) Entwickle zuerst ein Flussdiagramm auf Papier.

b) Setze es mit einer Zählschleife um.

Tipp 1: Was ist eine Stufe?

Eine Stufe besteht aus zwei Strecken: einmal nach oben und einmal nach rechts. Danach steht der Stift an der nächsten Stufe.

Tipp 2: Der Rumpf
for (int i = 0; i < 6; i++) {
    y = y + 40;
    stift.setPosition(x, y);
    x = x + 40;
    stift.setPosition(x, y);
}
Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Aufgabe 3: Vieleck

Zeichne ein regelmäßiges Vieleck mit dem Stift. Die Eckenzahl soll in einer Variablen stehen, damit du zwischen Dreieck, Fünfeck und Zwölfeck wechseln kannst.

Du brauchst dafür etwas Trigonometrie: Die Ecken eines regelmäßigen n-Ecks mit Radius r um den Mittelpunkt liegen bei

x k = r cos ( 2 π k n ) , y k = r sin ( 2 π k n ) x_k = r \cdot \cos\left(\frac{2\pi k}{n}\right), \qquad y_k = r \cdot \sin\left(\frac{2\pi k}{n}\right)

für k = 0 , 1 , , n k = 0, 1, \dots, n .

Tipp: Die Winkelfunktionen in Java

Math.cos(...) und Math.sin(...) erwarten den Winkel im Bogenmaß, nicht in Grad. Die Formel oben liefert genau das schon richtig.

Für die Positionen brauchst du int-Werte, also musst du das Ergebnis umwandeln – zum Beispiel mit (int) Math.round(...).

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Selbsttest

Zählschleifen

Teilbare URL erstellen

Abschnitte auswählen