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
- Schlagen Sie ein Ei auf!
- Schlagen Sie ein Ei auf!
- 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!!
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.
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!!
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.
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!
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?
Eva Katharina
25. Dezember 2015 at 17:23Wirklich 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.
Kim Peter
26. Dezember 2015 at 8:51Hallo 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
Genji2112
25. Januar 2020 at 0:05Guten Tag, ich bin zufällig auf diese Website gestoßen, da ich etwas für meine nächste Arbeit im Fach Informatik nachschauen wollte. Vielen Dank für die übersichlichen und anschaulichen Beiträge! Jene haben mir sehr geholfen
Kim Peter
5. Februar 2020 at 8:22Super! Das freut mich sehr!
Leonard
2. September 2017 at 15:13Super 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
Kim Peter
4. September 2017 at 5:41Hallo Leonard, vielen Dank für deine Rückmeldung. Ich freu mich wenn ich weiterhelfen kann. Viele Grüße Kim
Radu
19. Januar 2018 at 12:42Hallo Kim, danke für deine Hilfe. Ich versuche gerade, eine if else Schleife in eiener do-while Schleife einzufügen.
Kim Peter
27. Januar 2018 at 8:49Hi Radu, sehr gerne! Viele Grüße Kim
Josua
5. Mai 2018 at 18:19In 15 Minuten hier mehr verstanden als in allen Vorlesungen des Semesters zusammen… DANKE !!!
Josua
5. Mai 2018 at 18:21Und… noch dazu kostenlos…ohne Abo… Hut ab!
Kim Peter
6. Mai 2018 at 18:52Vielen Dank! Ich freue mich, wenn weiterhelfen kann. Viele Grüße Kim
Johnboy
19. Juli 2018 at 13:03In 15 Minuten hier mehr verstanden als in allen anderen Erklärungen.
Johnboy 66Jahre! DANKE
Kim Peter
8. September 2018 at 19:35Super! Danke für das Feedback!
Maxi
25. Juli 2018 at 15:46„Einzigster“. Die Kreativität des Autos erkennt man daran, wie viele Wörter er neu erfunden hat.
Kim Peter
8. September 2018 at 19:33🙂 Viele Grüße Kim
Christian
15. Januar 2019 at 21:49Super 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!
Kim Peter
16. Januar 2019 at 6:57Hallo Christian, ich danke dir für deine tolle Rückmeldung! Darüber freue ich mich sehr. Viele Grüße Kim
Mostafa
11. März 2019 at 22:16Hallo 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 !!
Kim Peter
12. März 2019 at 6:55Ich danke dir sehr!
Choose a style: