jubelndes Kind

Java while-Schleife



Ideen: A. M. Maier, G. Kompa, S. Brink, Elektronikschule Tettnang
E. Fuchst, "Java 9 Grundlagen Program­mierung, Herdt Verlag, 2017


Interessanter­weise habe ich noch kein Kind erlebt, dass es aufgibt Laufen zu lernen. Ein Kind lernt nie wieder so viel wie in seinem ersten Lebensjahr. So wie es in diesem Prozess keine festgelegte Anzahl gibt, werden in Java in der while-Schleife keine feste Anzahl an Wiederholungen durchlaufen und es können komplexere Bedingungen getestet werden.

In diesem Artikel lernst Du die Struktur der while-Schleife in Java kennen. Neben der Schleifenstruktur mit Initialisierung, Bedingung und Änderung, werden Anwendungen der while-Schleife und deren Unterschiede zur for-Schleife erklärt. Darüber hinaus wird das Konzept von Flags im Programmieren vorgestellt.

Wie oft muss ein Kind hinfallen bis es laufen kann? Die Idee der while-Schleife

Manche Kinder können schon nach einem dreiviertel Jahr laufen, andere erst nach knapp 2 Jahren. Diesen Prozess kann man nicht beschleunigen. Ein Kind läuft wenn es laufen kann und kein Kind gibt auf.

Man kann keine Vorhersage treffen, man wiederholt solange, bis es klappt. Dieser Ablauf ist in einer for-Schleife nicht vorgesehen, wohl aber in einer while-Schleife. Dies wird dadurch möglich, dass in der while-Schleife die Änderung im Schleifenkörper steht, die Initialisierung vorher festgelegt wird und nur noch die Bedingung im Schleifenkopf steht.

kleines Kind klettert auf Zaunpfahl

Die while-Schleife in Java Syntax



Struktogramm while-Schleife

Unser Körper baut Alkohol mit gleichbleibender Geschwindigkeit ab. Dabei geht man von etwa 0,15 ‰ pro Stunde aus. Pro Bier baut man etwa 0,4 ‰ auf. Mit dieser vereinfachten Berechnung, kann man leicht den aktuellen Alkoholwert im Blut bestimmen.

double alkohol = 0.5;
while(alkohol>=0.1)
{   //Wieviele Bier und welcher Zeitraum?
    alkohol=bier*0.4-zeit*0.15;
}

Eine while-Schleife kann aber mehr als zählen. Mit ihr kann man auch komplexere Bedingungen prüfen, wie beispielsweise den Alkoholgehalt im Blut.

Das englische Wort "while" bedeutet im deutschen "solange". Mit diesem Wort wird die Logik der Wiederholungsschleife gut beschrieben: Der zu wiederholende Teil wird solange wiederholt wie die Bedingung der Schleife wahr ist.

Die while-Schleife besitzt einen Schleifenkopf mit der Bedingung (Abbruch). Die Initialisierung (Startwert) erfolgt vorab. Der Schleifenkörper wird wiederholt. In ihm steht u.a. die Änderung (Schrittweite). Die Anzahl der Wiederholungen steht aber bei Eintritt in den Schleifenkörper grundsätzlich noch nicht fest.

Aufgabe 1 while-Schleife, for-Schleife und Entscheidung

In dieser Aufgabe soll der Unterschied zwischen while-Schleife, for-Schleife und einer Entscheidung untersucht werden.

  1. Bestimme den Unterschied zwischen den zwei Anweisungen.
  2. Schreibe folgende for-Schleife in eine while-Schleife um:
    for(int i = 0; i < 10; i++){
          System.out.println(i);
    }
  3. Begründe wieso die while(true)-Schleife keine Änderung im Schleifenkörper benötigt.
  1. Die Entscheidung wird einmalig abgearbeitet. Die while-Schleife hingegen solange, bis die Bedingung falsch ergibt. Da keine Änderung im Schleifenkörper vorhanden ist, erfolgt die Ausgabe unendlich oft.
  2. int i=0;
    while(i < 10){
          System.out.println(i);;
          i++;
    }
  3. Da die Bedingung mit dem Wert true sowieso immer wahr ist und es sich somit um eine Endlosschleife handelt.

Aufgabe 2 Notenberechnungsprogramm

Nach dem linearen Notenschlüssel werden Noten wie folgt berechnet:

$$Note=6-5\cdot\frac{erreichte Punktzahl}{Maximalpunktzahl}$$
  1. Erstelle die Klasse Notenberechnung. Dabei wird der Benutzer mit Hilfe einer while-Schleife jeweils nach der Punkteeingabe und Notenberechung gefragt, ob er erneut eine Note berechnen möchte.
  2. Bestimme die Maximalpunktezahl der Note in der Abbildung.
Note einer Klassenarbeit
  1. while(abfrage == true){
       ...

Aufgabe 3 Südseeurlaub

Südseeinsel

Erstelle die Klasse Suedseeurlaub. Der Anwender wird nach Flugpreis sowie folgende weiter Optionen gefragt die er mit j/n auswählt:
eine SMS-Benachrichtigung kostet 2,95 EUR, eine Reise­rücktritts­versicherung 32 EUR und eine Gepäck­versicherung 13 EUR. Ausgegeben wird der Gesamtpreis.

  1. Der Benutzer muss den richtigen Buchstaben j/n eingeben, ansonsten wird die Abfrage wiederholt.
  2. Am Ende wird der Benutzer gefragt, ob er eine erneute Eingabe wünscht und entsprechend das Programm wiederholt.

Aufgabe 4 Welche Aussage ist wahr?

Wähle die korrekten Aussagen aus.

int i=0;
while(i!=10) System.out.print(i++ +" ");

Gib die Ausgabe an. Wähle eine Antwort.

  1. 0 1 2 3 4 5 6 7 8 9
  2. 0 1 2 3 4 5 6 7 8 9 10
  3. 1 2 3 4 5 6 7 8 9 10
  4. 1 2 3 4 5 6 7 8 9


int n=1;
while(n<=15) System.out.print((n=n+3) +" ");

Gib die Ausgabe an. Wähle eine Antwort.

  1. 1 3 6 9 12 15
  2. 0 1 2 3 4 5 6 7 8 9 10
  3. 1 2 3 4 5 6 7 8 9 10 11 12 13
  4. 1 4 7 10 13



Gib Bestandteile der while-Schleife an.
Wähle beliebig viele Antworten.

  1. Initialisierung
  2. Schleifenloop
  3. Schleifenkörper
  4. Modifikation


Gib an wie lange eine while-Schleife wiederholt wird.
Wähle beliebig viele Antworten.

  1. solange die Bedingung falsch ist
  2. bis die Bedingung wahr ergibt
  3. solange bis die Bedingung wahr ist
  4. solange bis die Batterie leer ist


int i=11;
while(i!=10){ ... }

Bestimme i so, dass die Schleife stoppt. Wähle eine Antwort.

  1. 10
  2. 9
  3. 8
  4. 7


int bier=2; double alkohol=1.0;
while(alkohol>=0.0) alkohol=bier*0.4-zeit*0.15;

Bestimme die Zeit bis zum Verlassen. Wähle eine Antwort.

  1. 2 Stunden
  2. 4 Stunden
  3. 6 Stunden
  4. 8 Stunden

Entspann dich erstmal ...



Wie kommen Schaf, Kohlkopf und Wolf über den Fluss?

Dieses Rätsel ist ein Klassiker, welches ich Euch nicht vorenthalten möchte:

Ein Bauer möchte sein einzig Hab und Gut, ein Schaf, ein Kohlkopf und ein Wolf, unversehrt mit einem Floß über einen Fluss bringen.

Das Problem: Lässt er Schaf und Kohl allein zurück während er den Wolf über den Fluss bringt, wird der Kohl gefressen. Aber er hat immer nur Platz für eins von dreien. Übrigens: der Wolf frisst unbeaufsichtigt auch das Schaf.

Wie löst er das Problem?

Schafe

unvergessliche Spuren im Schnee



Skispuren

Der Schnee merkt sich jeden Skifahrer. Nicht so ein Taster:

Betätigen wir ihn ändert er seinen Zustand. Doch lassen wir ihn wieder los, sieht es so aus als wäre er nie betätigt worden.

Taster kommen sehr häufig in Steuerungen zum Einsatz, aber als Button auch in den meisten Apps.

Wenn man nun den Taster dazu bringen könnte, dass er sich wie der Schnee einen Zustand merken könnte hätten wir gewonnen.

Wir lachen bei Witzen, wenn das Überraschungsmoment stimmt. Aber wie können wir uns die Details merken damit dieses Moment rüber kommt?

Der Gedächtnistrainer Markus Hoffmann unvergesslich.de  verrät mit welcher Methode man sich diesen Witz ganz einfach merkt: "Stellen Sie sich z.B. den schönen Mann vor, wie er auf Ihrer Handfläche steht. Wenn Sie das nächste Mal einen Witz suchen, werfen Sie einfach einen Blick in Ihre Hand.Die nächsten Witze können Sie dann mit Ihrem Ellenbogen, Ihrer Schulter oder anderen Körperteilen kreativ verknüpfen. Erzählen Sie diese Witze mindestens fünf Personen. Das fördert Ihre rhetorischen Fähigkeiten und Ihr Gedächtnis. Sie werden an der Reaktion Ihrer Mitmenschen merken, welche Teile gut bzw. weniger gut ankommen. Ich finde: "Das ist ein Training, das wirklich Spaß macht!"

Flags Merker programmieren



Cappuccino

Auch beim Programmieren gibt es solche Merkhilfen. Wir nennen sie Flags. Es sind Variablen auf denen ein Zustand gespeichert wird. Beispielsweise wird beim Kaffeeautomat die Auswahl von Milch und Zucker angeboten. So lässt sich der letzte Zustand speichern:

boolean flagmilch = false;
System.out.println("Milch j/n");
auswahl = keyboard.next();
if(auswahl.charAt(0)=='j')   flagmilch=true;

Next steps
Du verstehst die Funktion der while-Schleife und kannst sie programmieren. Außerdem kannst Du Flags zum Speichern von Zuständen einsetzen. Nun kannst du die Aufgaben bearbeiten.

Aufgabe 5 Pineingabe

Autoren: G. Kompa, D. Supper

Smartphone Pineingabe
  1. Erstelle die Klasse PINeingabe welche den Anwender auffordert die 4stellige PIN 1391 einzugeben. Ist die PIN falsch wird die Eingabe wiederholt. Ist die PIN 3mal falsch wird die Eingabe ohne Fehlermeldung beendet.
  2. Ergänze das Programm mit einer Fehlermeldung, falls die PIN 3mal falsch eingegeben wurde.
  3. Bei 3facher Falscheingabe der PIN, soll nun eine dreifache PUKeingabe 733019 folgen, welche bei Bedarf wiederum mit einer Fehlermeldung endet.
  1. while(pin != eingabe && eingabecount < 3){
       eingabecount++;
    ...

Aufgabe 6 Kaffeeautomat - Flags

Autoren: D. Supper | binnendifferenziert

Zur Auswahl stehen KAFFEE (1), LATTE MACCHIATO (2), CAPPUCCINO (3), ESPRESSO (4) und Mokka(5). Die Aufgabe besteht darin, das Auswahlmenü des Kaffeeautomaten zu programmieren.

  1. Erstelle die Klasse Kaffeeautomat, mit der Variable String selektor. Zur Auswahl steht KAFFEE(K)...
  2. Berücksichtige bei der Auswahl auch den Wert k oder 1.

    Für jeden zusätzlichen Wert benötigt man einen eigenen Fall. Außerdem können auch Zahlen als Zeichen geprüft werden.

  3. Frage den Benutzer, ob er Milch oder Zucker haben möchte. Speicher den Zustand auf dem Flag flagmilch und flagzucker. Ergänze die Ausgabe bspw.mit: "KAFFEE wird mit Milch und Zucker zubereitet."
  4. Das Programm soll mit einem Flag flagerror erweitert werden. Bei fehlerhafter Eingabe soll im default-case das Flag auf false gesetzt werden, ebenso wie die Flags für Milch und Zucker. Mit Hilfe einer while-Schleife wird das Programm solange wiederholt, bis die Eingabe korrekt ist.
Cappuccino

  1. String selektor;
    selektor = kb.next();
    switch(selektor){
       case "K": ...

  2. switch(selektor){
       case "1":
       case "k":
       case "K": ...

  3. System.out.print("Milch (j/n): ");
    auswahl = keyboard.next();
    if(auswahl.charAt(0)=='j') flagmilch = true;

  4. while(flagerror == false){
      ...
      case "K"
        flagerror = true;
      ...
      default:
        flagerror = false;
    }

Aufgabe 7 Welche Aussage ist wahr?

Autor: Dean Skoda
Wähle die korrekten Aussagen aus.

Gegeben ist die folgende Wettervorhersage. Überprüfe alle Aussagen auf deren Wahrheitsgehalt.

Mi 17 Do 18 Fr 19 Sa 20 So 21 Mo 22 Di 23 Mi 24
24% 15% 11% 15% 57% 87% 92% 46%
NW NO O O NW W W SW
1kmh 2kmh 3kmh 2kmh 1kmh 3kmh 4kmh 2kmh

Bei Regen ist die Luftfeuchtigkeit immer über 50 %.

Bei Sonne ist es eindeutig über 5 °C.

Bei bedecktem Himmel ohne Regen beträgt die Windgeschwindigkeit maximal 3 km/h.

Bei Sonne ist es immer mindestens 5 °C und eindeutig mehr als 11 % Luftfeuchtigkeit.

An allen regnerischen Tagen ist die Windrichtung W oder SW oder an allen Freitagen ist es sonnig.

Die Temperatur beträgt niemals nicht über mindestens 5 °C und Mittwochs hat es eindeutig mehr als 23 % Luftfeuchtigkeit.


Wortliste und Satzbausteine



die while-Schlei­fe, -en Die while-Schleife ist eine kopf­gesteuerte Schleife, die einen Anweisungs­block solange wiederholt bis die Bedingung falsch wird.
die Initiali­sierung, -en hier wird der Startwert vor der Schleife festgelegt.
die Beding­ung, -en Sobald die Bedingung den Wert false ergibt wird die Schleife ver­lassen. Nur diese steht im Schleifenkopf.
die Än­derung, -en Die Änderung findet im Schleifenkörper statt. Dadurch können komplexere Bedingungen geprüft werden.
das Flag, -s Ein Flag ist eine Variable vom Datentyp boolean auf der Zustände gespeichert werden.