Schleifen - Kekziie/Informatik-II-SS-2017 GitHub Wiki

Schleifen - Wiederholte Ausführung von Anweisungen

Iteration: wiederholte Ausführung einer Schleife

Schleifenformate:

  • while-Schleife
  • for-Schleife
  • do-while-SChleife
  • for-each-Schleife

Hinweis: Es kommt bei Programmen mit Wiederholungsanweisungen immer vor, dass aufgrund von Programmfehlern Endlosschleifen auftreten.

while Schleife

führt eine Anweisung so lange aus, wie eine bestimmte Bedingung gültig ist

Anweisung ist entweder eine Einzelanweisung oder ein Block

while (<boolean-eypression>)
  <statement>

while (<boolean-eypression>) {
   <statements>
}

Boolescher Ausdruck wird ausgewertet:

  • false:
    • Ausführung der while-Schleife beendet
    • Programm springt über den Rest der while-Schleife
    • fährt mit nächster Anweisung (nach der Schleife) fort
  • true:
    • Anweisungen werden ausgeführt
    • Programm kehrt anschließend an der Anfang zurück
    • wiederholt den Prozess solange bis Bedingung false wird

Beispiel:

int number;  //die zu druckende Zahl

number = 1;  // beginnt mit 1
while ( number < 6) {
   System.out.println(number);
   number = number + 1;
}
System.out.println("Fertig!");

for-SChleife

Zählschleife besteht meist aus 3 Teilen:

  • Initialisierung
  • Abfrage der Schleifenbedingung
  • Fortschaltung

Beispiel:

int k,
    fak = 1;

for (k=1; k<=7; k++)
  fak = fak * k;

Struktur:

for (<Vorbereitung>; <(Start-)Bedingung>; <Fortschaltung>)
  <Anweisung>;

for (<Vorbereitung>; <(Start-)Bedingung>; <Fortschaltung>) {
  <Anweisungen>;
}
  • :
    • eine/mehrere Anweisungen durch Komma getrennt
    • Variablen Deklaration
  • <(Start-)Bedingung: boolescher Ausdruck
  • : eine/mehrere Anweisungen durch Komma getrennt
  • :
    • beliebige Anweisung
    • Folge von Anweisungen in einem Block {...}

Ausführung:

  1. Schleife initialisiert
  2. Bedingung ausgewertet
  3. falls Bedingung erfüllt: Schleifenrumpf wird ausgeführt
  4. anschließend wird die Fortschaltung ausgeführt
  5. Bedingung wird erneut ausgewertet ...

weitere Details:

  • innerhalb der Vorbereitung deklarierte Variablen ist nur innerhalb der Schleife gültig
  • Schleifenrumpf wird für jeden Wert einer "Laufvariable" einmal ausgeführt

Beispiel

Ausgabe einer Zahlenfolge

Aufgabe:

  • es sollen die geraden Zahlen zwischen 2 und 20 ausgegeben werden
  • also: 2 4 6 8 10 12 14 16 18 20

for-Schleife:

for (int n = 2; n <= 20; n = n + 2)
 System.out.print(n + " ") ;

while-Schleife:

int n = 2;
while (n <= 20) {
   System.out.print(n + " ");
   n = n + 2;
}

Geschachtelte Schleifen

Schleifenkörper können aus beliebigen Anweisungen zusammen gesetzt sein

-> Schleifenkörper können auch selbst wieder SChleifen sein

Beispiel:

for (int rowNo = 1; rowNo <= 12; rowNo++) 
{
  for (int n = 1; n <= 12; n++) { 
    // drucke 4 char Spalten
    System.out.printf("%4d", n * rowNo);
  }
  // Zeilenvorschub am Zeilenende
  System.out.println();
}

Erläuterung:

  • druckt Tabelle mit dem Produkt aus Zeile mal Spalte
  • für jeden Zeilenindex werden die Produkte der Zeile mit n = 1 ... 12 gedruckt

do-while-Schleife

wiederholt eine Anweisung, bis eine Bedingung nicht mehr erfüllt ist

do <Anweisung>
while (<Bedingung>);

do {
 <Anweisungen>
} while (<Bedingung>);

Erläuterung:

  • (Schleifenkopf) boolescher Ausdruck
  • (schleifenrumpf) Anweisung oder Block

-> Anweisungen werden also in jedem Fall mindestens einmal ausgeführt

Ausführung:

  1. Anweisung ausgeführt
  2. Bedingung wird ausgewertet
  3. Anweisungen wird wiederholt, solange bis Bedingung nicht mehr erfüllt (false)

Beispiel:

int k   = 1,
    fak = 1;

do {
  fak = fak * k;
  k++;
} while (k <= 7);
⚠️ **GitHub.com Fallback** ⚠️