CodeGym /Java-Blog /Random-DE /Die While-Anweisung
Autor
Artem Divertitto
Senior Android Developer at United Tech

Die While-Anweisung

Veröffentlicht in der Gruppe Random-DE
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:

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:
  1. Befinden sich Äpfel in der Schüssel, dann führen wir die Schritte 1.1 bis 1.4 aus:

    1. 1.1. Schnapp dir einen Apfel
    2. 1.2. Schälen Sie es und schneiden Sie es in Scheiben
    3. 1.3. Die Apfelscheiben im Tortenboden in einer Pfanne anrichten
    4. 1.4. Kehren Sie zu Schritt 1 zurück.
Die while-Anweisung – 2Nehmen 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?
  • 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:
  1. Wir werten den booleschen Ausdruck aus, der in den Klammern nach dem Schlüsselwort while steht .
  2. 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
  3. 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:
  1. Der Schleifenkörper wird ausgeführt (unmittelbar nach dem Schlüsselwort do ).
  2. Wir werten den booleschen Ausdruck aus, der in den Klammern nach dem Schlüsselwort while steht .
  3. Wenn der boolesche Ausdruck „true“ ergibt, fahren wir mit Schritt 1 fort
  4. Wenn der boolesche Ausdruck „falsch“ ergibt, springen wir zur ersten Anweisung nach der while- Schleife.
Die beiden Hauptunterschiede zur vorherigen Schleife sind: 1) Der Schleifenkörper wird mindestens einmal ausgeführt und 2) Der boolesche Ausdruck wird ausgewertet, nachdem der Schleifenkörper ausgeführt wurde. Dementsprechend wird diese Art von while- Schleife als Schleife mit einer Nachbedingung bezeichnet . Dieses Mal zeigen wir eine Tabelle mit Potenzen einer Zahl an, die 10.000 nicht überschreitet:

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 weitermachen.
  • 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.
Erinnern Sie sich an unser Fruchtbeispiel. Wenn wir uns über die Qualität der Äpfel nicht sicher sind, können wir den Code mithilfe einer continue- Anweisung ändern:

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:
  1. Befinden sich Äpfel in der Schüssel, dann führen wir die Schritte 1.1 bis 1.4 aus:

    1. 1.1. Schnapp dir einen Apfel
    2. 1.2. Schälen Sie es und schneiden Sie es in Scheiben
    3. 1.3. Die Apfelscheiben im Tortenboden in einer Pfanne anrichten
    4. 1.4. Kehren Sie zu Schritt 1 zurück.
Lassen Sie uns den Slicing-Prozess genauer beschreiben:
  1. Anzahl der Scheiben = 0
  2. Solange die Anzahl der Slices < 12 ist, führen Sie die Schritte 2.1 bis 2.3 aus

    1. 2.1. Schneiden Sie eine weitere Scheibe vom Apfel ab
    2. 2.2. Anzahl der Slices++
    3. 2.3. Kehren Sie zu Schritt 2 zurück
Und wir werden dies zu unserem Kuchenbackalgorithmus hinzufügen:
  1. Befinden sich Äpfel in der Schüssel, dann führen wir die Schritte 1.1 bis 1.6 aus:

    1. 1.1. Schnapp dir einen Apfel
    2. 1.2. Schälen Sie es
    3. 1.3. Anzahl der Scheiben = 0
    4. 1.4. Solange die Anzahl der Slices < 12 ist, führen Sie die Schritte 1.4.1 bis 1.4.3 aus
      1. 1.4.1. Schneiden Sie eine weitere Scheibe vom Apfel ab
      2. 1.4.2. Anzahl der Slices++
      3. 1.4.3. Kehren Sie zu Schritt 1.4 zurück
    5. 1.5. Die Apfelscheiben im Tortenboden in einer Pfanne anrichten
    6. 1.6. Kehren Sie zu Schritt 1 zurück.
Jetzt haben wir eine Schleife innerhalb einer Schleife. Konstrukte wie diese kommen sehr häufig vor. Als letztes Beispiel bauen wir eine der Multiplikationstabellen, die wir in der Grundschule lieben gelernt haben.

 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.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION