Schleifen mit for
Dauer: 30 Minuten
for
als Alternative zuwhile
for
läuft von Start- bis Endwert ab- Für Arrays ist
for
praktisch
Ziel: for
-Schleifen verstehen und nutzen
Schleifen werden sehr oft in verschiedenen
Situationen eingesetzt, z.B. wenn etwas
mehrfach wiederholt werden soll bis eine
bestimmte Bedingung erfüllt ist. Dies lässt
sich grundsätzlich mit einer
while
-Schleife
umsetzen, wie wir bereits gesehen haben.
Manchmal steht vor der Ausführung der Schleife fest,
wie oft sie durchlaufen wird (z.B. bei Listen bzw.
Arrays). Auf diese Fälle ist die for
-Schleife
zugeschnitten und stell somit eine praktische
Alternative zur while
-Schleife in manchen
Situationen dar.
Syntax einer for
-Schleife
for(Initialisierungen; logischer Ausdruck; Aktualisierungen) {
// Vor dem ersten Durchlauf werden Initialisierungen ausgeführt
// Anweisungen in diesem Block werden ausgeführt,
// solange der logische Ausdruck true ist
// Am Ende der Schleife werden die Aktualisierungen ausgeführt
}
- Die
Initialisierungen
werden ausgeführt. - Der
logische Ausdruck
wird ausgewertet. - Ist der Wert des
logischen Ausdrucks
gleichtrue
, dann werden die Anweisungen im nachfolgenden Block ({ … }
) ausgeführt. Direkt im Anschluss werden dieAktualisierungen
ausgeführt und es wird wieder zu Schritt 2 gesprungen. - Ist der Wert des
logischen Ausdrucks
jedochfalse
, so wird diefor
-Schleife beendet, ohne dass der Block durchlaufen wird.
Beispiel: Mittelwert
Wie könnte mit einer for
-Schleife der Mittelwert
mehrerer Zahlen berechnet werden, die mit der
Tastatur eingegeben wurden?
Vorüberlegung:
- Anzahl der Zahlen wird eingegeben und in einer Variablen
count
gespeichert. - Variable
sum
zur Zwischenspeicherung der Summe aller eingegebenen Zahlen deklarieren. - Von 1 bis
count
laufen und jedes Mal eine neue Zahl eingeben, die in einer Variablennum
gespeichert wird. Zusätzlich den neuen Wert der Summe insum
durch Addition mitnum
(eingegebene Zahl) berechnen. - Am Ende den Mittelwert durch
sum/count
berechnen und ausgeben.
let count = parseInt(prompt("Wieviele Zahlen willst Du eingeben?"));
let num, sum = 0;
for(let i = 1; i <= count; i++) {
num = parseInt(prompt(`Bitte Zahl Nr. ${i} eingeben`));
sum = sum + num;
}
console.log("Mittelwert: " + sum/count);
Bemerkungen
Beachte die Strichpunkte/Semikola (;
) nach den
Initialisierungen und dem logischen Ausdruck:
for( ; ; ) {
// hier ist der Block der for-Schleife
// mit den zu wiederholenden Anweisungen
// …
}
Initialisierungen sind Deklarationen und Zuweisungen
einer oder mehrerer Variablen, die nur im Rumpf der
for
-Schleife ihren Gültigkeitsbereich haben
(d.h. sie sind lokale Variablen).
Aktualisierungen sind im Prinzip einfache
JavaScript-Ausdrücke, in der Regel handelt es sich
aber um Inkrement- oder Dekrement-Operatoren
(häufig mit ++
bzw. --
)
Durch Kommata getrennt können mehrere Initialisierungen und Aktualisierungen verwendet werden. Dies kommt eher selten vor, würde aber z.B. so aussehen:
for(let l = 10, m = 10; l + m > 0; l = l - 2, m--) {
console.log(l + m);
}
Oben sehen wir ein Beispiel mit zwei Initialisierungen und zwei Aktualisierungen. Solch eine Schleife kann natürlich sehr unübersichtlich werden — daher kommt dies selten vor und wir meistens anders ausgedrückt.
Geschachtelte for
-Schleifen
Gelegentlich sind jedoch geschachtelte
for
-Schleifen nützlich oder sogar notwendig:
let jMax = parseInt(prompt("Obere Schranke für 1. Zahl: "));
let kMax = parseInt(prompt("Obere Schranke für 2. Zahl: "));
console.log("Die Produkte des Einmaleins:");
for(let j = 1; j <= jMax; j++) {
for(let k = 1; k <= kMax; k++) {
console.log(`${j} * ${k} = ${j*k}`);
}
}
Dies kann zu folgender Ausgabe führen:
Obere Schranke für 1. Zahl: 5
Obere Schranke für 2. Zahl: 3
Die Produkte des Einmaleins:
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
Beispiele mit Fehlern
// (1)
for(;;) {
console.log("Netzstecker ziehen!");
}
// (2) - Gültigkeitsbereich von a ist nur im Rumpf der for-Schleife
for(let a = 0; a < 5; a++) {
console.log(a + " " + a*a*a);
}
console.log(a); // --> ReferenceError
for
-Schleife mit Array
Standard-Beispiel einer for
-Schleife mit Array:
let list = [1,2,3,4];
// Start bei 0, da dies erster Index im Array ist
// Schleife läuft nur solange i kleiner als die Listenlänge ist
// Indexe von Arrays der Länge n: 0,1,2,3...n-1
// list.length ist also n-1
for(let i = 0; i < list.length; i++) {
console.log(list[i]);
}
Ausprobieren und üben:
for
-Schleife, die die Liste rückwärts durchläuft- oder jeden zweiten Eintrag überspringt
- oder nur durch 3 teilbare Zahlen ausgibt
- usw.
Programm mit geschachtelter bzw. innerer
for
-Schleife erstellen, sodass sich folgender
Ablauf mit Ein- und Ausgaben ergibt:
// Eingabe
Anzahl der Zahlen: 3
1. Zahl: 9
2. Zahl: -8
3. Zahl: 18
//Ausgabe
Ungerade Zahlen < 9: 1,3,5,7
-8 nicht erlaubt. Nur Zahlen > 0!
Ungerade Zahlen < 18: 1,3,5,7,9,11,13,15,17
Zusatz: Mit Funktionen und while
-Schleifen
soll bei jeder Eingaben sichergestellt werden,
dass nur Zahlen > 0 eingegeben werden.
for
und while
for
- und while
-Schleifen haben dieselbe
Ausdruckskraft.
Jede for
-Schleife kann als while
-Schleife
umgeschrieben werden und umgekehrt.
Auch hierzu sollten sich alle mit Übungsaufgaben beschäftigen.
for…of
In JavaScript gibt es mit dem Konstrukt for…of
eine weitere Möglichkeit,
Arrays zu durchlaufen:
let list = [1,2,3,4];
for(let x of list) {
console.log(x);
}
// 1
// 2
// 3
// 4
for…of
kann nicht nur auf Arrays, sondern auch auf Strings und im
Allgemeinen auf sogenannte „Iterables“ angewendet werden. Mehr Infos
zu for…of
und Iterables: