while-Schleife
aus ZUM-Wiki, dem Wiki für Lehr- und Lerninhalte auf ZUM.de
| Kurzinfo | ||
|---|---|---|
| ||
|
|
In den meisten Programmiersprachen gibt es die While-Schleife als Kontrollstruktur. Sie dient dazu, eine Abfolge von Anweisungen mehrfach auszuführen, solange eine Bedingung erfüllt ist. Diese Bedingung wird geprüft, bevor die Anweisungsfolge abgearbeitet wird. Es kann also auch sein, dass die Abfolge gar nicht ausgeführt wird. Wenn die Bedingung ständig erfüllt ist, dann wird die Schleife zur Endlosschleife. Wenn deutsche Befehlsworte gewählt werden, dann heißt die While-Schleife meist Solange-Schleife. (...) Die While-Schleife verwendet man normalerweise bei dynamischen Abbruchbedingungen, die for-Schleife meistens, wenn man vorher definiert wie viele Durchläufe die Schleife hat. Zum Beispiel würde man für die Berechnung der Fakultät einer Zahl vorzugsweise die For-Schleife anwenden. Analog zu anderen Schleifenkonstrukten bieten viele Sprachen die Möglichkeit, eine While-Schleife per explizitem Befehl, d. h. ohne weitere Prüfung, zu verlassen (Break-Befehl).
|
Inhaltsverzeichnis |
|
Mit Hilfe des folgenden Beispiels lässt sich die while-Schleife einführen. Besser ist allerdings, wenn man es mit einer for-Schleife realisiert. D.h. falls man es nutzt, sollte man dieses Beispiel vor der for-Schleife behandeln. Versteckspiel als Beispiel für eine while-SchleifeVersteckspiel: Als Suchender muss man zunächst bis 100 zählen, dann laut „Ich komme...“ rufen. Erst dann darf man zum Suchen aufbrechen. Dieses simple Spiel ist ein einfacher Algorithmus: VERSTECKSPIELZÄHLUNG Die erste Zahl ist 1. Prüfe, ob die 100 erreicht wurde Wenn das noch nicht erfüllt ist, sage die Zahl und erhöhe die Zahl um eins. Wenn doch, dann rufe „Ich komme“ Mit while (engl. solange) lassen sich Programmabläufe abhängig von einer Bedingung wiederholen. Die Bedingung wird vor Ausführung der Anweisung abgefragt ("prechecked loop", "kopfgesteuerte Schleife").
while (Bedingung) { Anweisungsblock (was soll wiederholt werden?) } Die Versteckspiel Zählung als Java-QuelltextSo sähe das Verstecken-Beispiel als Methode der Klasse Verstecken aus. Der Computer schreibt die Zahlen von 1 bis zahl in die Konsole.
Wenn die oberen Zahlen nicht mehr zu sehen sind, liegt das an der Konsole, die nur begrenzt viele Zeilen zulässt. Das Problem kann man umgehen, indem man statt println ein print einsetzt. Dann wird nicht bei jeder Zahl eine neue Zeile begonnen. public class Verstecken { public void zaehleBisZahlundRufe(int zahl) { int x; // Eine Zählvariable x x=1; // Anfangswert für x while (x <= zahl) { System.out.println (x); // schreibe x auf die Konsole x++; // erhöhe x um 1 } System.out.println ("Ich komme...!"); } } EndlosschleifeEine Schleife, die (eigentlich) niemals endet und dabei den Computer völlig auslastet ist eine typische Ursache für Abstürze. Die folgende Methode ist eine Endlosschleife, die unendlich lange ausgeführt würde, wenn niemand die Ausführung stoppen würde. Typischer Fehler: Es wird x als Bedingung abgefragt: (x<100) , aber es wird x nicht innerhalb der Schleife verändert. public void führeEndlosschleifeAus(){ int x; // Eine Zählvariable x x=1; // Anfangswert für x while (x <= 100) { System.out.println (x); // schreibe x auf die Konsole // Typischer Fehler: x wird in der Schleife nicht erhöht. } } |
Bevor Sie die Methode ausprobieren, lesen Sie zunächst, wie man in BlueJ Programmausführungen stoppt:
Notunterbrechungen bei BlueJ
Mit Strg+Umschalt+R setzen Sie die Virtuelle Maschine zurück, was eine Beendigung der aktuell ausgeührten Methode bewirkt. Sie können auch auf der rot-weißen Ausführungsnanzeige mit der rechten Maustaste das Kontextmenu hervorholen und die Ausführung damit stoppen.
|
Übungen mit while und Zufallszahlen
Übungen zu Zufallszahlen eignen sich, um die Interaktion zwischen verschiedenen Klassen zu demonstrieren. Die recht einfache Klasse Zufallszahl sieht wie folgt aus:
public class Zufallszahl { private int zufallszahl; // gibt eine Zufallszahl zwischen 1 und maximum zurück public int getZufallszahl(int maximum) { return (int) (Math.random()*maximum+1); } }
Diese Klasse kann man nun auf einfache Weise in anderen Klassen verwenden. Eine Eigenschaft z.B. wuerfel vom Typ Zufallszahl wird vorbereitet (vgl. erste Zeilen).
Nun lassen sich mit wuerfel.getZufallszahl(6) Zufallszahlen zwischen 1 und 6 bestimmen, die man z.B. ausgeben kann (erste Methode) oder einer Variable zuweisen kann (zweite Methode).
public class Wuerfelexperiment1 { private Zufallszahl wuerfel; public Wuerfelexperiment1 (){ wuerfel=new Zufallszahl(); } public void gibWuerfelAus(int anzahl) { int i=1; while (i<=anzahl){ System.out.println("Wurf "+i+ " ist "+wuerfel.getZufallszahl(6)); i++; } } public void wuerfeleBisZurSechs() { int i=1; // Erster Wurf muss auf jeden Fall durchgeführt werden int zwischenspeicher=wuerfel.getZufallszahl(6); System.out.println("Wurf "+i+ " ist "+zwischenspeicher); // weitere Würfe while (zwischenspeicher!=6){ i++; zwischenspeicher=wuerfel.getZufallszahl(6); System.out.println("Wurf "+i+ " ist "+zwischenspeicher); } } }
Würfelexperiment2 – diesmal mit 2 Würfeln
|
Fakultät
Das folgende Beispiel zeigt, wie sich die while-Schleife zur Berechnung der Fakultät einsetzen kann. Denkbar wäre auch ein Einsatz der for-Schleife.
public int fakultaet(int zaehler) { int fakultaet=1; while (zaehler > 1) { fakultaet*=zaehler; zaehler--; } return fakultaet; }
Seite bookmarken