Unsere allerersten Programme bestanden aus einer Folge von Anweisungen, die nacheinander ausgeführt wurden. Keine Gabeln. Dazu gehört HelloWorld, das eine Begrüßung anzeigt. Es beinhaltet arithmetische Berechnungen. Nach unseren ersten Programmen lernten wir, wie man verzweigt, also wie man ein Programm dazu bringt, abhängig von bestimmten Bedingungen unterschiedliche Aktionen auszuführen. Hier ist der Code zur Steuerung einer Zentralheizung und Klimaanlage:
Nehmen wir an, Sie haben zehn Äpfel, zwei Hände und ein Messer. Im wirklichen Leben schälen Sie nacheinander das gesamte Dutzend und folgen dabei für jeden Apfel dem gleichen Algorithmus. Aber wie bringen wir ein Programm dazu, für jeden Apfel eine sich wiederholende Aktion auszuführen?
weitermachen.
if (tempRoom>tempComfort)
airConditionerOn();
if (tempRoom<tempComfort)
heaterOn();
Mach den nächsten Schritt. Im Alltag führen wir oft gleichförmige, sich wiederholende Handlungen aus, zum Beispiel das Schälen von Äpfeln für einen Kuchen. Dieser faszinierende Prozess kann wie folgt beschrieben werden:
-
Befinden sich Äpfel in der Schüssel, dann führen wir die Schritte 1.1 bis 1.4 aus:
- 1.1. Schnapp dir einen Apfel
- 1.2. Schälen Sie es und schneiden Sie es in Scheiben
- 1.3. Die Apfelscheiben im Tortenboden in einer Pfanne anrichten
- 1.4. Kehren Sie zu Schritt 1 zurück.

- Wir binden uns an die Anzahl der Äpfel, aber wenn wir nicht genug davon haben, werden einige der Befehle ohne „Nutzlast“ ausgeführt (und wir schneiden uns möglicherweise, während wir versuchen, einen nicht vorhandenen Apfel zu schälen).
- Wenn es mehr Äpfel gibt, als Befehle zum Schälen gibt, bleiben einige Äpfel ungeschält.
- Ein solcher Code ist schwer zu lesen. Es gibt viele Wiederholungen und ist schwer zu modifizieren.
Schleifen sind Anweisungen, die die wiederholte Ausführung von Aktionen ermöglichen
Die while- Schleife von Java wird in unserem Fall gut funktionieren. Dieses Konstrukt bringt mehrere Aktionen in eine prägnante und verständliche Struktur. Unter Verwendung einer While- Schleife könnte ein Algorithmus zum Schneiden von Äpfeln für einen Kuchen in Java so aussehen:
while (numberOfApplesInBowl > 0) {
apple = bowl.grabNextApple();
arrangeInPie(apple.peel().slice());
numberOfApplesInBow--; // "--" is the decrement operator, which reduces the number of apples by one
}
System.out.println("The apples for the pie have been processed.");
Befehlssyntax
Die erste Variante der while- Anweisung sieht folgendermaßen aus:
while (Boolean expression) {
// Loop body — the statement(s) that are repeatedly executed
}
Hier ist eine Schritt-für-Schritt-Erklärung, was passiert, wenn dieser Code ausgeführt wird:
- Wir werten den booleschen Ausdruck aus, der in den Klammern nach dem Schlüsselwort while steht .
- Wenn der boolesche Ausdruck „true“ ergibt, werden die Anweisungen im Schleifenkörper ausgeführt. Nachdem die letzte Anweisung im Schleifenkörper ausgeführt wurde, fahren wir mit Schritt 1 fort
- Wenn der boolesche Ausdruck „falsch“ ergibt, springen wir zur ersten Anweisung nach der while- Schleife.
Schleife mit einer Vorbedingung
Da wir immer den booleschen Ausdruck (die Bedingung für den Eintritt in die Schleife) auswerten, bevor wir den Schleifenkörper ausführen, wird diese Form der while -Schleife oft als Schleife mit einer Vorbedingung bezeichnet . Lassen Sie uns eine Tabelle der ersten zehn Potenzen einer Zahl erstellen:
public static void main(String[] args) {
int base = 3; // The number that will be exponentiated
int result = 1; // The result of exponentiation
int exponent = 1; // The initial exponent
while (exponent <= 10) { // The condition for entering the loop
result = result * base;
System.out.println(base + " raised to the power of " + exponent + " = " + result);
exponent++;
}
}
Konsolenausgabe:
3 raised to the power of 1 = 3
3 raised to the power of 2 = 9
3 raised to the power of 3 = 27
3 raised to the power of 4 = 81
3 raised to the power of 5 = 243
3 raised to the power of 6 = 729
3 raised to the power of 7 = 2187
3 raised to the power of 8 = 6561
3 raised to the power of 9 = 19683
3 raised to the power of 10 = 59049
Process finished with exit code 0
Schleife mit einer Nachbedingung
Hier ist die zweite Variante dieser Schleife:
do {
// Loop body — the statement(s) that are repeatedly executed
} while (Boolean expression);
Hier ist eine Erklärung, was passiert, wenn dieser Code ausgeführt wird:
- Der Schleifenkörper wird ausgeführt (unmittelbar nach dem Schlüsselwort do ).
- Wir werten den booleschen Ausdruck aus, der in den Klammern nach dem Schlüsselwort while steht .
- Wenn der boolesche Ausdruck „true“ ergibt, fahren wir mit Schritt 1 fort
- Wenn der boolesche Ausdruck „falsch“ ergibt, springen wir zur ersten Anweisung nach der while- Schleife.
public static void main(String[] args) {
int base = 3; // The number that will be exponentiated
int result = base; // The result of exponentiation
int exponent = 1; // The initial exponent
do {
System.out.println(base + " raised to the power of " + exponent + " = " + result);
exponent++;
result = result * base;
} while (result < 10000); // The condition for exiting the loop
}
Konsolenausgabe:
3 raised to the power of 1 = 3
3 raised to the power of 2 = 9
3 raised to the power of 3 = 27
3 raised to the power of 4 = 81
3 raised to the power of 5 = 243
3 raised to the power of 6 = 729
3 raised to the power of 7 = 2187
3 raised to the power of 8 = 6561
Process finished with exit code 0
Achten Sie auf die Änderungen im Code. Vergleichen Sie dies mit der Schleife mit einer Vorbedingung.
Interessante Fakten zur Arbeit mit Schleifen
Verzweigungsanweisungen innerhalb des Schleifenkörpers
Es gibt zwei Anweisungen, die sich auf die Ausführung innerhalb einer Schleife auswirken: break (auf die wir im nächsten Kapitel ausführlicher eingehen) und- continue – überspringt die Ausführung des restlichen Schleifenkörpers in der aktuellen Iteration und springt zur Auswertung des booleschen Ausdrucks der while-Anweisung. Wenn der Ausdruck „true“ ergibt, wird die Schleife fortgesetzt.
- break – beendet sofort die Ausführung der aktuellen Iteration und übergibt die Kontrolle an die erste Anweisung nach der Schleife. Somit beendet diese Anweisung die Ausführung der aktuellen Schleife. Wir werden es im nächsten Artikel genauer betrachten.
while (numberOfApplesInBowl > 0) {
apple = bowl.grabNextApple();
numberOfApplesInBow--; // "--" is the decrement operator, which reduces the number of apples by one
if (apple.isBad()) { // This method returns true for rotten apples
apple.throwInGarbage();
continue; // Continue the loop. Jump to evaluation of numberOfApplesInBowl > 0
}
arrangeInPie(apple.peel().slice());
}
Die
continue- Anweisung wird häufig verwendet, wenn Anweisungen im Schleifenkörper ausgeführt werden müssen, wenn eine bestimmte Bedingung erfüllt ist. Beispielsweise möchten wir möglicherweise Aktionen ausführen, wenn ein Hardwaresensor ausgelöst wird (ansonsten setzen wir einfach die Schleife fort, in der wir Sensormesswerte erfassen), oder wir möchten einen Ausdruck nur für bestimmte Iterationen einer Schleife berechnen. Ein Beispiel für den letzteren Fall ist unsere Verwendung einer While-Schleife zur Berechnung der Summe von Kubikzahlen natürlicher Zahlen, deren Quadrat kleiner als die Anzahl der Zahlen ist. Verwirrt? Schauen Sie sich den folgenden Code an:
public static void main(String[] args) {
int sum = 0; // Total amount
int i = 0; // Initial number in the series
int count = 20; // Number of numbers
while (i <= count) {
i++; // Get the next number — "i++" is equivalent to "i = i + 1"
if (i * i <= count) // If the square of the number is less than
continue; // the number of numbers, then we won't calculate the sum
// Jump to the next number in the loop
sum += i * i * i; // Otherwise, we calculate the sum of the cubes of numbers
} // "sum += i * i * i" is notation that is equivalent to "sum = sum + i * i * i"
System.out.println(sum); // Print the result
}
Endlosschleife
Diese Verzweigungsanweisungen werden am häufigsten in Endlosschleifen verwendet. Wir nennen eine Schleife unendlich, wenn die boolesche Bedingung zum Verlassen der Schleife niemals erfüllt ist. Im Code sieht es etwa so aus:
while (true) {
// Loop body
}
In diesem Fall hilft uns eine
break- Anweisung, die Schleife zu verlassen. Diese Art von Schleife eignet sich, wenn auf externe Bedingungen gewartet wird, die außerhalb des Schleifenkörpers ermittelt werden. Zum Beispiel in Betriebssystemen oder Spielen (das Verlassen der Schleife bedeutet das Beenden des Spiels). Oder wenn Algorithmen verwendet werden, die mit jeder Iteration einer Schleife versuchen, ein Ergebnis zu verbessern, aber die Anzahl der Iterationen basierend auf der verstrichenen Zeit oder dem Auftreten eines externen Ereignisses (z. B. Dame, Schach oder Wettervorhersage) begrenzen. Denken Sie daran, dass Endlosschleifen unter normalen Bedingungen nicht wünschenswert sind. Zur Veranschaulichung kehren wir zur Potenzierung zurück:
public static void main(String[] args) {
int base = 3; // The number that will be exponentiated
int result = 1; // The result of exponentiation
int exponent = 1; // The initial exponent
while (true) {
result = result * base;
System.out.println(base + " raised to the power of " + exponent + " = " + result);
exponent++;
if (exponent > 10)
break; // Exit the loop
}
}
Konsolenausgabe:
3 raised to the power of 1 = 3
3 raised to the power of 2 = 9
3 raised to the power of 3 = 27
3 raised to the power of 4 = 81
3 raised to the power of 5 = 243
3 raised to the power of 6 = 729
3 raised to the power of 7 = 2187
3 raised to the power of 8 = 6561
3 raised to the power of 9 = 19683
3 raised to the power of 10 = 59049
Process finished with exit code 0
Verschachtelte Schleifen
Und jetzt kommen wir zu unserem letzten Thema über Schleifen. Erinnern Sie sich an den Apfelkuchen (ich hoffe, Sie haben im Moment keinen Hunger) und unsere Apfelschälschleife:-
Befinden sich Äpfel in der Schüssel, dann führen wir die Schritte 1.1 bis 1.4 aus:
- 1.1. Schnapp dir einen Apfel
- 1.2. Schälen Sie es und schneiden Sie es in Scheiben
- 1.3. Die Apfelscheiben im Tortenboden in einer Pfanne anrichten
- 1.4. Kehren Sie zu Schritt 1 zurück.
- Anzahl der Scheiben = 0
-
Solange die Anzahl der Slices < 12 ist, führen Sie die Schritte 2.1 bis 2.3 aus
- 2.1. Schneiden Sie eine weitere Scheibe vom Apfel ab
- 2.2. Anzahl der Slices++
- 2.3. Kehren Sie zu Schritt 2 zurück
-
Befinden sich Äpfel in der Schüssel, dann führen wir die Schritte 1.1 bis 1.6 aus:
- 1.1. Schnapp dir einen Apfel
- 1.2. Schälen Sie es
- 1.3. Anzahl der Scheiben = 0
- 1.4. Solange die Anzahl der Slices < 12 ist, führen Sie die Schritte 1.4.1 bis 1.4.3 aus
- 1.4.1. Schneiden Sie eine weitere Scheibe vom Apfel ab
- 1.4.2. Anzahl der Slices++ 1.4.3. Kehren Sie zu Schritt 1.4 zurück
- 1.5. Die Apfelscheiben im Tortenboden in einer Pfanne anrichten
- 1.6. Kehren Sie zu Schritt 1 zurück.
public static void main(String[] args) {
// Print the second factors in a row
System.out.println(" 2 3 4 5 6 7 8 9");
int i = 2; // Assign the first factor to the variable
while (i < 10) { // First loop: execute as long as the first factor is less than 10
System.out.print(i + " | "); // Print the first factor at the beginning of the line
int j = 2; // The starting value of the second factor
while (j < 10) { // Second loop: execute as long as the second factor is less than 10
int product = i * j; // Calculate the product of the factors
if (product < 10) // If the product is a single digit, then we print two spaces after the product
System.out.print(product + " ");
else // Otherwise, print the product and one space after it
System.out.print(product + " ");
j++; // Increment the second factor by one
} // Go to the beginning of the second loop, i.e. "while (j < 10)"
System.out.println(); // Move to the next line on the console
i++; // Increment the first factor by one
} // Go to the beginning of the first loop, i.e. "while (i < 10)"
}
Konsolenausgabe:
2 3 4 5 6 7 8 9
2 | 4 6 8 10 12 14 16 18
3 | 6 9 12 15 18 21 24 27
4 | 8 12 16 20 24 28 32 36
5 | 10 15 20 25 30 35 40 45
6 | 12 18 24 30 36 42 48 54
7 | 14 21 28 35 42 49 56 63
8 | 16 24 32 40 48 56 64 72
9 | 18 27 36 45 54 63 72 81
Process finished with exit code 0
Schleifen (insbesondere die
while- Anweisung) gehören zu den Grundbausteinen von Software. Durch das Lösen von Aufgaben auf CodeGym lernen Sie die verschiedenen Arten von Schleifen kennen, verstehen ihre Feinheiten und erwerben praktische Fähigkeiten in deren Verwendung.
GO TO FULL VERSION