Schleifen - Kekziie/Informatik-II-SS-2017 GitHub Wiki
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.
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!");
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:
- Schleife initialisiert
- Bedingung ausgewertet
- falls Bedingung erfüllt: Schleifenrumpf wird ausgeführt
- anschließend wird die Fortschaltung ausgeführt
- 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
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;
}
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
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:
- Anweisung ausgeführt
- Bedingung wird ausgewertet
- 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);