Kontrollstrukturen in Java (Teil 2). Wiederholungen! While, do-while und for Schleifen.

Keylearnings:

  • Anweisungsblock mittels einer Schleife mehrfach ausführen.
  • Verwendung von Schleifen als Kontrollstruktur in Java
  • Wie funktioniert eine for Schleife?
  • Wie funktioniert eine while Schleife?
  • Wie funktioniert eine do-while Schleife?
  • Vor- und Nachteile der verschiedenen Schleifentypen.

Nachdem wir uns bereits mit dem if..then..else und dem switch Konstrukt beschäftigt haben, wollen wir uns jetzt mit einer weiteren wichtigen Kontrollstruktur befassen!

Und zwar den Schleifen!

Du kennst das sicher!

Du hast dir bei Chefkoch ein Kochrezept besorgt, in welchem

  1. Schlagen Sie ein Ei auf!
  2. Schlagen Sie ein Ei auf!
  3. Schlagen Sie ein Ei auf!

steht.

Kim, wo hast du denn bitte deine Kochrezepte her?

Natürlich, wird das so nicht im Rezept stehen!

Vielmehr wird die Anweisung „Schlagen Sie drei Eier auf!“ lauten.

Na toll!! Jetzt redest du übers Kochen! Hallo Kim klopf, klopf hast du vielleicht vergessen, dass wir große Programmierer werden wollen?

 Gaanz ruhig!!

tiger

Wir werden sehr oft in der Situation sein, dass wir in einem Programm eine Anweisung mehr als einmal ausführen müssen.

Stell dir einen Raum mit 20 Personen vor!

Wir möchten gerne jede Person nach ihrem Namen fragen. Die schlechte Vorgehensweise wäre es, das mit 20 Einzelanweisungen zu bewerkstelligen.

1: System.out.println("Person 1 wie heißen Sie?");
2: System.out.println("Person 2 wie heißen Sie?");
				.
				.
				.
20: System.out.println("Person 20 wie heißen Sie?")

Viel besser wäre es doch, wenn wir eine Anweisung von der Art „Frage alle 20 Personen nach ihren Namen!“ geben könnten.

Und genau das können wir mit Hilfe der Schleifen-Kontrollstrukturen erreichen!

Die for Schleife in Java!

Schauen wir uns mal folgenden Programmschnipsel an:

1: for(int i = 1;i<=20;i++){
2:   System.out.println("Person "+i+" wie heißen Sie?");
3: }

Ich weiß, ich geh dir mit dieser Frage auf den Schnürsenkel. Aber nur Übung macht den Meister! Hast du eine Idee was dieses kleine Programm macht?

Korrekt! Du bist richtig gut!!

Das Programm stellt 20-mal die Frage Person i wie heißen Sie? Hierbei nimmt die Variable i jeden Wert zwischen 1 und 20 an. Die Programmausgabe lautet:

Person 1 wie heißen Sie?
Person 2 wie heißen Sie?
.
.
Person 20 wie heißen Sie?

Der Trick hierbei ist die Verwendung einer sogenannten for-Schleife!

Nun, wie funktioniert das Ganze?

Einprägsamerweise beginnt eine for Schleife immer mit dem Schlüsselwort for.

Zwischen den beiden runden Klammern stehen drei Elemente, die jeweils durch ein Simikolon voneinander getrennt sind.

Struktur einer <code>for-Schleife</code> in Java

Im ersten Teil definieren wir eine Zählervariable i, welcher wir den Wert eins zuweisen.

Teil zwei der Schleifendefinition ist die Bedingung i<=20.  Solange diese erfüllt ist, wird im dritten Teil die Zählervariable i um eins erhöht und die Anweisung System.out.println("Person "+i+" wie heißen Sie?") ausgeführt.

Die Anweisung i++ nennt der Fachmann Inkrement womit nichts anderes als die Erhöhung der Variablen i um eins gemeint ist.

Wir hätten also genauso gut auch i = i+1 schreiben können.

Natürlich ist es sinnvoll, dass die Zählervariable eine ganze Zahl, also vom Datentyp Integer ist. Dazu zwingen tut uns aber niemand.

Wir können auch eine Variable vom Typ double als Zählervariable verwenden. Schau dir folgendes Beispiel an:

for(double d=0.5;d<=10;d+=0.5){
     System.out.println("Person "+d*2+" wie heißen Sie?"); 
}

Steigst du dahinter was das Programm macht?

Richtig! Auch hier werden wieder 20 Personen nach ihrem Namen gefragt. Die Programmausgabe ist:

Person 1.0000 wie heißen Sie?
Person 2.0000 wie heißen Sie?
.
.
Person 20.0000 wie heißen Sie?

Einzigster Unterschied zu der Programmausgabe von oben, ist dass hier der Zähler als Dezimalzahl mit trennendem Punkt ausgegeben wird. Das liegt einfach daran, dass unsere Zählervariable d eine Variable vom Datentyp double ist.

Wir initialisieren die double Variable d im Zuweisungsteil der Schleife mit 0.5 und erhöhen diese in jedem Schleifendurchlauf um den Wert 0.5. Das machen wir solange bis d den Wert 10 erreicht hat.

Wir haben also auch hier wieder 20 Schleifendurchläufe. Indem wir mit dem Faktor 2 multiplizieren, verpassen wir der Variablen d noch etwas Schminke. Das machen wir, weil wir keine halben Personen ansprechen wollen.

Die while Schleife in Java!

Bei der Kontrollstruktur for-Schleife legen wir durch die Initialisierung der Zählervariablen (im Beispiel
i=1) und der Abbruchbedingung (im Beispiel i<=20) vor dem Start der Schleife fest wie oft die Anweisungen zwischen den geschweiften Klammern wiederholt werden sollen.

Das ist in vielen Fällen aber viel zu unflexibel!

WARNUNG!  Es gibt Programmierer, die im Schleifenrumpf der for-Schleife (der Teil,  der zwischen den geschweiften Klammern steht) die Zählervariable ändern und damit die Anzahl der Schleifendurchläufe während der Schleifenlaufzeit verändern. Ich bitte dich! MACH DAS NIE!! Das macht deine Programme nur unverständlich!

Stell dir vor! Peter hat ein Blinddate mit Franka!!

Please forgive me my dear!

Peter hat keine Ahnung wie Franka aussieht. Er weiß nur, dass das Date in der neuen hippen Szene Bar am Stadtrand stattfindet. Genau da wo sich die ganzen coolen Programmierer rumtreiben.

Peter bleibt nichts anderes übrig als sich solange durchzufragen bis er Franka gefunden hat. Und genau hierbei hilft ihm eine Kontrollstruktur namens while Schleife. Schau dir mal folgendes Programm an:

1: boolean frankaGefunden = false;
2: InputStreamReader isr = new InputStreamReader(System.in);
3: BufferedReader br = new BufferedReader(isr);
4: while(frankaGefunden == false){
5:   System.out.println("Entschuldigung bist du Franka? 
                   Ja/Nein");
6:   String antwort = br.readLine();
7:   if (antwort.equals("Ja")){
8:      frankaGefunden = true;
9:   }
10:}
11:System.out.println("Hallo ich bin Peter schön 
                           dich kennenzulernen!");

Wir wollen uns hier nicht so sehr mit den Details beschäftigen. In den Zeilen zwei, drei und sechs verwenden wir Eingabestreams, mit welchen wir uns noch in einem eigenen Artikel beschäftigen werden. Auch wollen wir uns nicht so sehr über die Bedingung in der if Abfrage aus Zeile sieben den Kopf zerbrechen.

Was macht das Programm?

Das Programm gibt solange die Frage Entschuldigung bist du Franka? J/N auf dem Bildschirm aus, bis die Bildschirmeingabe Ja lautet. Danach endet das Programm mit der Bildschirmausgabe Hallo ich bin Peter schön dich kennenzulernen!.

Nein
Entschuldigung bist du Franka? J/N
Nein
Entschuldigung bist du Franka? J/N
Ja
Hallo ich bin Peter schön dich kennenzulernen!

Kim, das ist geil! Wie funktioniert das?

Zunächst deklarieren wir gleich in der ersten Zeile eine boolesche Variable frankaGefunden.

In Zeile zwei beginnt die while Schleife. Durch diese Kontrollstruktur wird der Programmcode zwischen den geschweiften Klammern (Zeile vier und neun) solange ausgeführt bis die Bedingung zwischen den runden Klammern nicht mehr erfüllt ist.

Aufbau einer while Schleife
Struktur einer while Schleife

In unserem Beispiel ist die Bedingung solange erfüllt bis die Antwort auf die Frage "Entschuldigung bist du Franka? J/N" Ja lautet. Dann ist die if Bedingung in Zeile sieben erfüllt und die Variable frankaGefunden erhält in Zeile acht den Wert true und die Bedingung frankaGefunden == false im Bedingungsteil der while Schleife ist nicht mehr wahr, weshalb der Programmcode innerhalb der Schleife (Zeile fünf bis acht) nicht mehr ausgeführt wird und das Programm mit der Ausgabe "Hallo ich bin Peter schön dich kennenzulernen!" endet.

Merke! Bei der while Schleife wird die Bedingung direkt am Anfang überprüft, deshalb kann es passieren, dass der Anweisungsteil dieser Kontrollstruktur kein einziges mal ausgeführt wird.

In unserem Beispiel wäre das der Fall, wenn wir die Variable frankaGefunden mit true initialisiert hätten.

Deshalb gibt es noch einen weiteren Schleifentyp. Nämlich die sogenannte do-while Schleife.

Die do-while Schleife in Java

Okay, lass uns nicht labern, lassen wir lieber den Quellcode sprechen!

1: boolean frankaGefunden = false;
2: InputStreamReader isr = new InputStreamReader(System.in);
3: BufferedReader br = new BufferedReader(isr);
4: do{
5:        System.out.println("Entschuldigung bist du Franka? 
                                  J/N");
6:	String antwort = br.readLine();
7:	if (antwort.equals("Ja")){
8:	    frankaGefunden = true;
9:	}
10: }while(frankaGefunden==false);
11: System.out.println("Hallo ich bin Peter schön 
                  dich kennenzulernen!");
12: 

Okay, was denkst du? Was macht dieses Programm?

Korrekt!

Das gleiche wie unser Programm von oben! Auch hier wird wieder solange die Frage "Entschuldigung bist du Franka? J/N" gestellt bis die Antwort Ja lautet.

Allerdings wird die Bedingung frankaGefunden==false erst am Ende der Schleife geprüft, sodass der Anweisungsteil der Kontrollstruktur (Zeile fünf bis acht) mindestens einmal ausgeführt wird.

Merke! Der Anweisungsteil einer do-while Schleife wird mindestens einmal ausgeführt!

do-while Schleife
Aufbau einer do-while Schleife

Wann solltest du welchen Schleifentyp verwenden?

Da wir bei der for-Schleife einen festen Startwert und eine feste Endbedingung haben, solltest du diese Kontrollstruktur immer dann einsetzen, wenn du bereits weißt wie oft die Ausführung eines Anweisungsblocks wiederholt werden soll.

Die while und do-while Schleifen werden deutlich flexibler verwendet, da bei jedem Schleifendurchlauf neu entschieden wird, ob eine weitere Wiederholung des Anweisungsteils stattfinden soll oder nicht.

Die Unterschiede zwischen der while und der do-while Kontrollstruktur sind eher geringfügig.

In der while Schleife entscheidest du zu Beginn, noch vor dem Anweisungsteil, ob ein (weiterer) Schleifendurchlauf erfolgen soll. Bei der do-while Schleife steht die Bedingung hingegen am Ende, weshalb du erst am Schluss entscheidest, ob ein weiterer Durchlauf stattfinden soll.

Meist ist es Geschmackssache, ob du eine while oder eine do-while Kontrollstruktur verwendest.

Typisches Anwendungsgebiet einer do-while Schleife, ist dass zeilenweise Einlesen einer Textdatei. Hier musst du nach jeder eingelesenen Zeile prüfen, ob die Datei bereits vollständig eingelesen wurde, oder ob noch weitere Zeilen folgen und weitere Schleifendurchläufe erforderlich sind.

Ein gutes Beispiel für die Anwendung einer while Schleife ist eine Kreuzung im Straßenverkehr. Hier solltest du zu deiner eigenen Sicherheit erst die Ampel überprüfen (Bedingung) und erst danach die Kreuzung überqueren (Anweisungsteil).

Damit haben wir alle Kontrollstrukturen in Java kennengerlernt.

Wie immer freue ich mich über deine Fragen im Kommentarbereich!

Hat dir der Artikel gefallen?

Hallo ich bin Kim und ich möchte ein großer Programmierer werden. Machst du mit?

Kommentare (17)

  • Antworte

    Wirklich tolle Blogeinträge schreibst du da Kim! Habe jetzt alle deine Kapitel zum Grundkonzept durch und bin begeistert. Ich bin gerade Erstsemester in einem Informatik Studiengang und dein Blog eignet sich wirklich toll um alles gelernte nochmal besser zu verstehen, zu vertiefen und nachzuvollziehen. Du kannst das wirklich toll erklären.

    • Hallo Eva, vielen Dank für deinen netten Kommentar. Ich freue mich sehr, wenn meine Beiträge weiterhelfen. Sollte es ein Thema geben, für das du dich besonders interessierst, lass es mich wissen. Vielleicht kann ich einen Artikel drüberschreiben. Informatik und Informatik affine Studenten der ersten Semester sind nämlich genau die Menschen, für die ich schreiben möchte. Viele Grüße Kim

  • Antworte

    Super Erklärungen die du überall schreibst. Echt Top. Ich bin 16 und beschäftige mich schon länger mit Java und habe trotzdem vieles noch nicht verstanden aber dank all deinen Blogs ist Java lernen deutlich Leichter geworden weil ich es einfach echt gut verstehe und anwenden kann.
    Viele Grüße Leo

    • Hallo Leonard, vielen Dank für deine Rückmeldung. Ich freu mich wenn ich weiterhelfen kann. Viele Grüße Kim

  • Antworte

    Hallo Kim, danke für deine Hilfe. Ich versuche gerade, eine if else Schleife in eiener do-while Schleife einzufügen.

    • Hi Radu, sehr gerne! Viele Grüße Kim

  • Antworte

    In 15 Minuten hier mehr verstanden als in allen Vorlesungen des Semesters zusammen… DANKE !!!

    • Und… noch dazu kostenlos…ohne Abo… Hut ab!

    • Vielen Dank! Ich freue mich, wenn weiterhelfen kann. Viele Grüße Kim

  • Antworte

    In 15 Minuten hier mehr verstanden als in allen anderen Erklärungen.

    Johnboy 66Jahre! DANKE

    • Super! Danke für das Feedback!

  • Antworte

    „Einzigster“. Die Kreativität des Autos erkennt man daran, wie viele Wörter er neu erfunden hat.

    • 🙂 Viele Grüße Kim

  • Antworte

    Super Erklärung! Anfangs habe ich while – und do-while Schleife nicht verstanden. Jetzt verstehe ich alles dank deinen Blog! Gute Beispiele ausgedacht. Hab alles innerhalb 15 Minuten verstanden. Danke Kim!

    • Hallo Christian, ich danke dir für deine tolle Rückmeldung! Darüber freue ich mich sehr. Viele Grüße Kim

  • Antworte

    Hallo Kim,
    als eine Mensch der noch nicht die deutsche Sprache richtig beherrschen kann, muss ich sagen hast ja richtig gut erklärt .
    Ich bin sehr dankbar bei dir und hoffe, dass du immer weiter so machst.
    Du bist einfach einzigartig !!

    • Ich danke dir sehr!

Hinterlasse ein Kommentar