JavaRush /Java-Blog /Random-DE /While-Schleife in Java

While-Schleife in Java

Veröffentlicht in der Gruppe Random-DE

Einführung

Unsere allerersten Programme bestanden aus einer Folge von Anweisungen, die nacheinander ausgeführt wurden. Keine Gabeln. Dies ist HelloWorld, das einen Begrüßungssatz und arithmetische Berechnungen an die Konsole ausgibt. Nach den ersten Programmen haben wir gelernt, zu verzweigen, das heißt, das Programm führt abhängig von den Bedingungen bestimmte Aktionen aus. So können Sie die Klimaanlage so programmieren, dass sie sich zum Heizen und Kühlen einschaltet:
if (tempRoom>tempComfort)
    airConditionerOn();
if (tempRoom<tempComfort
    heaterOn();
Machen wir den nächsten Schritt. Im Alltag führen wir oft monotone, sich wiederholende Tätigkeiten aus, zum Beispiel das Schälen von Äpfeln für einen Kuchen. Dieser faszinierende Prozess kann wie folgt beschrieben werden:
  1. Befinden sich Äpfel im Becken, dann befolgen Sie die Schritte 1.1 bis 1.4:

    1. 1.1. Nimm einen Apfel
    2. 1.2. Putzen und in Scheiben schneiden
    3. 1.3. Auf den Boden des Teigkuchens in einer Bratpfanne legen
    4. 1.4. Kehren wir zu Schritt 1 zurück.
Betreiber während - 2
Nehmen wir an, Sie haben 10 Äpfel, 2 Hände und ein Messer. Im Leben reinigt man konsequent die gesamten zehn, geleitet von demselben Algorithmus. Wie können Sie das Programm dazu bringen, bei jedem Apfel eine sich wiederholende Aktion auszuführen?
  • Halten wir uns an die Anzahl der Äpfel, aber wenn wir nur wenige davon hätten, würden einige der Befehle ohne „Nutzlast“ vergeblich ausgeführt werden (und wir würden uns vielleicht schneiden, während wir einen nicht vorhandenen Apfel schälen).
  • Wenn es mehr Äpfel gibt als unsere Verarbeitungsteams, bleiben einige der Produkte unverarbeitet.
  • Ein solcher „Code“ ist schwer zu lesen, enthält viele Wiederholungen und ist schwer zu ändern.

Schleifen sind Operatoren zum mehrmaligen Ausführen von Aktionen.

Die Java-While-Schleife (Vile-Schleife) funktioniert in unserem Fall gut. Dieses Design organisiert mehrere Aktionen in einer prägnanten und verständlichen Struktur. Ein While-Algorithmus zum Schneiden von Äpfeln für einen Kuchen in Java könnte so aussehen:
while(числоЯблокВТазике>0) {
    яблоко = тазик.взятьОчередноеЯблоко();
    положитьВПирог(яблоко.чистить().нарезать());
    числоЯблокВТазике--;//-- Dies ist eine Dekrementierung, die die Anzahl der Äpfel um eins reduziert
}
System.out.println(„Äpfel für den Kuchen werden verarbeitet.“);

Befehlssyntax

Die erste Möglichkeit, die while-Anweisung zu beschreiben, ist wie folgt:
while(Логическое выражение) {
	// Schleifenkörper – regelmäßig ausgeführte Anweisung(en)
}
Dies geschieht wie folgt (Schritt für Schritt):
  1. Wir werten die boolesche Bedingung aus, die dem while in Klammern folgt.
  2. Wenn die logische Bedingung wahr ist, werden die Anweisungen im Schleifenkörper ausgeführt. Fahren Sie nach der Ausführung der letzten Anweisung im Schleifenkörper mit Schritt 1 fort
  3. Wenn die logische Bedingung falsch ist, fahren Sie mit der ersten Anweisung außerhalb der while-Schleife fort.

Schleife mit Vorbedingung

Da wir vor der Ausführung des Schleifenkörpers immer einen logischen Ausdruck (die Bedingung für den Eintritt in die Schleife) vorab berechnen, wird diese Art von while oft als Schleife mit einer Vorbedingung bezeichnet. Lassen Sie uns eine Tabelle der ersten zehn ganzzahligen, positiven Potenzen einer Zahl erstellen:
public static void main(String[] args) {
    int number = 3; // Zahl, die potenziert werden soll
    int result = 1; // Ergebnis der Potenzierung
    int power = 1; // Anfangsexponent
    while(power <= 10) { // Schleifeneintrittsbedingung
        result = result * number;
        System.out.println(number + „in dem Ausmaß“ + power + " = " + result);
        power++;
    }
}
Ergebnis der Konsolenausgabe:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049
Process finished with exit code 0

Schleife mit Nachbedingung

Zweiter Zyklustyp:
do {
    // Schleifenkörper – regelmäßig ausgeführte Anweisung(en)
}while (Логическое выражение);
Wird wie folgt durchgeführt (Schritte):
  1. Der Hauptteil der Schleife wird ausgeführt (unmittelbar nach dem Schlüsselwort do).
  2. Wir werten die boolesche Bedingung aus, die dem while in Klammern folgt.
  3. Wenn die logische Bedingung wahr ist, fahren Sie mit Schritt 1 fort
  4. Wenn die logische Bedingung falsch ist, fahren Sie mit der ersten Anweisung außerhalb der while-Schleife fort.
Zwei Hauptunterschiede zum vorherigen Schleifentyp: Der Schleifenkörper wird mindestens einmal ausgeführt und die logische Bedingung wird überprüft, nachdem der Schleifenkörper ausgeführt wurde. Daher wird diese Art von While-Schleife als Postcondition-Schleife bezeichnet. Dieses Mal zeigen wir eine Tabelle mit Potenzen einer Zahl von nicht mehr als 10.000 an:
public static void main(String[] args) {
    int number = 3;// Zahl, die potenziert werden soll
    int result = number;// Ergebnis der Potenzierung
    int power = 1;// Anfangsexponent
    do {
        System.out.println(number + „in dem Ausmaß“ + power + " = " + result);
        power++;
        result = result * number;
    }while (result < 10000); // Schleifenausgangsbedingung
Ergebnis der Konsolenausgabe:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
Process finished with exit code 0
Achten Sie auf die Änderungen im Code und vergleichen Sie ihn mit der Version der Schleife mit einer Vorbedingung.

Interessante Fakten zur Arbeit mit Schleifen

Steuerbefehle im Hauptteil der Schleife

Es gibt zwei Befehle, die den Fortschritt der Schleife beeinflussen: break, deren Funktionen wir im nächsten Kapitel zeigen werden, und weitermachen.
  • continue – stoppt die Ausführung des Hauptteils der aktuellen Schleife und wechselt zum logischen Ausdruck des while-Operators. Wenn der berechnete Ausdruck wahr ist, wird die Ausführung der Schleife fortgesetzt.
  • break – stoppt sofort die Ausführung der aktuellen Schleife und springt zum ersten Befehl außerhalb der Schleife. Dadurch wird die Ausführung der aktuellen Schleife unterbrochen. Wir werden uns im nächsten Thema genauer damit befassen.
Erinnern wir uns an unser Obstbeispiel. Wenn wir uns über die Qualität der angebotenen Äpfel nicht sicher sind, können wir den Code mit dem folgenden Befehl ändern continue:
while(числоЯблокВТазике>0) {
    яблоко = тазик.взятьОчередноеЯблоко();
    числоЯблокВТазике--;//-- Dies ist eine Dekrementierung, die die Anzahl der Äpfel um eins reduziert
    if (яблоко.плохое()) {  // Methode gibt „true“ für faul usw. zurück. Äpfel
        яблоко.выкинутьВМусор();
        continue; // setze die Schleife fort und gehe zur Bedingungsnummer vonApplesIn the Basin>0
    }
    положитьВПирог(яблоко.чистить().нарезать());
}
Die Konstruktion continuewird häufig verwendet, wenn im Körper einer Schleife Befehle ausgeführt werden müssen, wenn eine bestimmte Bedingung eintritt, beispielsweise um Aktionen auszuführen, wenn ein Sensor im Gerät ausgelöst wird (andernfalls einfach den Zyklus des Lesens seiner Indikatoren fortsetzen) oder um einen Ausdruck nur in bestimmten Schritten des Zyklus zu berechnen. Ein Beispiel für den letzten Fall ist die Berechnung der Summe von Kubikzahlen natürlicher Zahlen, deren Quadrat kleiner als ihre Zahl ist, in einer While-Schleife:
public static void main(String[] args) {
    int sum = 0;    // Gesamtmenge
    int i = 0;      // Startnummer der Zeile
    int count = 20; // Anzahl der Zahlen
    while(i<=count) {
        i++;        // nimm die nächste Zahl, i++ ist äquivalent zu i=i+1
        if (i*i<=count)  // wenn das Quadrat der Zahl kleiner ist
            continue;   // Anzahl der Zahlen – Summe nicht zählen
                        // Weiter zur nächsten Zahl in der Schleife
        sum += i*i*i; // andernfalls berechnen wir die Summe der dritten Zahlen
    } // sum += i*i*i – Notation ähnlich wie sum = sum + i*i*i
    System.out.println(sum);// Ergebnis drucken
}

Endloser Kreislauf

Diese Steuerbefehle werden am häufigsten in einer Endlosschleife verwendet. Dies wird so genannt, weil die logische Exit-Bedingung niemals erfüllt ist. Im Code sieht es etwa so aus:
while(true) {
    // Schleifenkörper
}
In diesem Fall ist es hilfreich , einen Befehl breakzum Organisieren eines Ausstiegs zu verwenden. Diese Art von Schleife tritt auf, wenn auf externe Bedingungen gewartet wird, die außerhalb der Logik des Schleifenkörpers gebildet werden. Beispielsweise in Spielen, die die virtuelle Welt um den Helden herum nachahmen (Verlassen der Schleife = Verlassen des Spiels), Betriebssysteme. Oder bei der Verwendung von Algorithmen, die vielleicht das Ergebnis mit jedem weiteren Aufruf in der Schleife verbessern, sie aber durch die Zeit oder das Eintreten eines externen Ereignisses (Dame, Schach oder Wettervorhersage) begrenzen. Es sollte beachtet werden, dass Endlosschleifen unter normalen Bedingungen eines der Probleme der Programminstabilität sind. Zur Veranschaulichung kehren wir zu den Potenzen der Zahlen zurück:
public static void main(String[] args) {
    int number = 3; // Zahl, die potenziert werden soll
    int result = 1; // Ergebnis der Potenzierung
    int power = 1; // Anfangsexponent
    while(true) {
        result = result * number;
        System.out.println(number + „in dem Ausmaß“ + power + " = " + result);
        power++;
        if (power>10)
            break; // Verlasse die Schleife
    }
}
Ergebnis der Konsolenausgabe:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049
Process finished with exit code 0

Verschachtelte Schleifen

Hier kommen wir zum letzten Thema unserer Zyklen. Denken wir mal an Apfelkuchen (hoffentlich hast du im Moment keinen Hunger) und an unsere „Schleife“:
  1. Befinden sich Äpfel im Becken, befolgen Sie die Schritte 1.1 bis 1.4:

    1. 1.1. Nimm einen Apfel
    2. 1.2. Putzen und in Scheiben schneiden
    3. 1.3. Auf den Boden des Teigkuchens in einer Bratpfanne legen
    4. 1.4. Kehren wir zu Schritt 1 zurück.
Lassen Sie uns den Vorgang des Schneidens in Scheiben genauer beschreiben:
  1. Anzahl der Scheiben = 0
  2. Während die Anzahl der Slices < 12 ist, befolgen Sie die Schritte 2.1 bis 2.3

    1. 2.1. Schneiden Sie eine weitere Scheibe von einem Apfel ab
    2. 2.2. Anzahl der Scheiben ++
    3. 2.3. Kehren Sie zu Schritt 2 zurück
Und fügen Sie es in unseren Süßwarenalgorithmus ein:
  1. Befinden sich Äpfel im Becken, dann befolgen Sie die Schritte 1.1 bis 1.6:

    1. 1.1. Nimm einen Apfel
    2. 1.2. Abziehen
    3. 1.3. Anzahl der Scheiben = 0
    4. 1.4. Пока число долек < 12, выполнить шаги с 1.4.1 по 1.4.3
      1. 1.4.1. Отрезать очередную дольку от яблока
      2. 1.4.2. Кол-во долек ++
      3. 1.4.3. Возвращаемся на шаг 1.4
    5. 1.5. Помещаем дольки на тестовое основание пирога из теста на сковороде
    6. 1.6. Возвращаемся на шаг 1.
Получoder цикл в цикле. Подобные конструкции весьма частые. Для завершающего примера построим таблицу умножения, которые школьники 90-х видели на обложках тетрадей в младших классах.
Betreiber während - 3
public static void main(String[] args) {
    // Zeigt die Werte des zweiten Multiplikators in der Zeile an
    System.out.println("    2  3  4  5  6  7  8  9");
    int i = 2;      // Erster Multiplikator, Startwert zuweisen
    while(i<10) {   // Erste Schleife, ausführen, während der erste Multiplikator kleiner als 10 ist
        System.out.print(i + " | ");// Den ersten Multiplikator am Anfang der Zeichenfolge anzeigen
        int j = 2;                  // zweiter Multiplikator, Startwert
        while (j<10) { // Zweite Schleife, ausführen, während der zweite Multiplikator kleiner als 10 ist
            int mul=i*j; // Berechnen Sie das Produkt der Faktoren
            if (mul<10)  // Wenn es eine Ziffer enthält, werden zwei Leerzeichen dahinter gedruckt
                System.out.print(mul + "  ");
            else   // andernfalls wird das Produkt ausgegeben und danach ein Leerzeichen
                System.out.print(mul + " ");
            j++;     // Erhöhe den zweiten Multiplikator um eins,
        }            // Gehe zum Anfang der zweiten Schleife (while (j<10 ).... )
        System.out.println(); // Zur nächsten Ausgabezeile wechseln
        i++;                  // Erhöhe den ersten Multiplikator um eins,
    }                         // Gehe zum Anfang der ersten Schleife (while ( i<10 ) ....
}
Результат вывода на консоль:
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
Циклы (в частности, оператор while) – один из фундаментальных кирпичиков построения программ. Решая задачи на JavaRush, вы изучите все их разнообразие, разберёте тонкости функционирования и получите практические навыки их применения.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION