| For Loop |
Es
gibt drei Arten, in Java Schlaufen zu programmieren: For, While und
Do - while. Beginnen wir mit der For - Schlaufe und beginnen wir mit
einem Beispiel:
- Erzeugen Sie ein
neues Projekt namens LoopTest mit dem Template "Basic
Java Application"und erstellen Sie wieder die paint()
Methode ganz am Schluss von LoopTestFrame (vor der letzten schliessenden
geschweiften Klammer).
- Die Methode soll
folgende Anweisung enthalten:
for (int i = 0; i <= 9; i++)
g.drawString("Nummer "+i,20,100+20*i);
- Übersetzen (<F7>)
und testen (<F5>) Sie!
Erklärung:
- Die For - Anweisung
besteht aus drei Teilen: Dem Namen for, der runden Klammer mit der
"Schleifenmechanik" und dem Schlaufeninhalt.
- Die Runde Klammer
besteht wieder aus drei Teilen, die durch ; getrennt sind.
- Der erste Teil sagt,
wie die Schlaufe beginnt: Hier "Beginne mit einem Wert von 0 für die
Variable i".
- Der zweite Teil
ist die Abbruchbedingung. Hier: Die Schlaufe wird ausgeführt, solange
i kleiner oder gleich 9 ist.
- Der dritte Teil
gibt die Veränderung von einem Schlaufendurchgang zum nächsten an.
Eigentlich sollte hier stehen i = i + 1. Da es sehr häufig vorkommt,
dass ein Variablenwert um 1 erhöht wird, gibt es diese abgekürzte Schreibweise
i++ (C++ lässt grüssen!).
- Der Schlaufeninhalt
besteht in unserem Fall aus einer einzigen Anweisung, nämlich dem Aufruf
der Methode drawString(). Würde die Schlaufe aus mehreren Anweisungen
bestehen, müssten diese in einer geschweiften Klammer zusammengefasst
werden.
- Sie sehen, dass
in der Schlaufe die "Laufvariable" i verwendet werden kann. Sie soll
hier aber nicht verändert werden, sonst gibt es ein Durcheinander!
- Beachten Sie auch
einen Trick beim Text (= String), welcher herausgeschrieben wird: Strings
können "addiert" werden. Das bedeutet, dass sie einfach aneinandergehängt
werden (=
concatenation). Java wandelt hier die Zahl i (int!) in einen String
um. Später folgt mehr zu Strings.
Aufgaben:
- Wie wär's mit Quadratzahlen?
Zwei Kolonnen: In der ersten steht die Zahl, in der zweiten ihr Quadrat.
Tips:
-
Quadrieren nie durch Potenz, sondern als Multiplikation, das
geht schneller!
- Der erste Wert (Parameter) in drawString() muss ein String sein -
auch der leere ist einer!
-
Schöner
wäre wohl eine Zeichnung, Quadratzahlen ergeben doch eine Parabel:

Tips:
- In drawLine() brauchen Sie jeweils den "neuen" und den "alten"
Wert von i, also z.B. i und i+1!
- Achten Sie darauf, dass Sie gut skalieren, i also mit einem günstigen
Wert multiplizieren!
- Sie können auch die Grösse des Fensters verändern. Finden Sie heraus
wo? Bei mir ist's 200 mal 200.
|
|
| While Loop |
For Loops
werden verwenden, wenn man von Anfang an weiss, wie oft die Schlaufe
durchlaufen wird, While Loops im andern Fall. Nehmen wir als Beispiel
Zufallszahlen: Wir zählen wie oft wir würfeln müssen, bis wir eine 6
gewürfelt haben:
- Zum dritten Mal
erzeugen Sie ein neues Projekt, diesmal mit Namen RandomTest und
erstellen die paint() Methode.
- In die paint()
Methode kommt die Anweisung
g.drawString("Zufallszahl = "+Math.random(),10,100);
- Übersetzen
und laufen lassen, mehrmals laufen lassen!
Math ist eine sogenannte
Klasse und sie enthält die Methode random().
Random liefert eine zufällige Zahl zwischen 0 und 1 (wie Sie sicher
festgestellt haben) vom Typ double. Wir wollten aber Zahlen zwischen
1 und 6.
- Also multiplizieren
Sie mit 6!
Das gibt aber immer
noch Zahlen mit Kommastellen (double!). Wir wandeln Datentypen
um,
indem wir den gewünschten Typ in Klammer davor schreiben. Und wir müssen
noch 1 dazuzählen, denn ein Würfel hat ja keine Seite ohne
ein
einziges
Auge! Bei mit sieht das dann so aus:
(int)(Math.random()*6+1)
Das
hatte noch nichts mir einer Schlaufe zu tun.Wir wollen würfeln,
bis wir
eine
6 haben
und uns merken, wie oft wir gewürfelt haben, mit do-while:
public void paint(Graphics
g) {
int zahl;
int i = 0;
do {
zahl = (int)(Math.random()*6+1);
i++;
} while (zahl < 6);
g.drawString("Beim "+i+". Wurf eine 6!",10,100);
}
- Lassen Sie das
Programm in dieser Form laufen, mehrmals.
Ich habe die do-while
Schlaufe verwendet: Das was zwischen do und while steht wird solange
ausgeführt, als die Bedingung in der Klammer nach while erfüllt ist.
Diese Form hat den Vorteil, dass die Schlaufe mindestens einmal ausgeführt
wird, weil erst am Ende geschaut wird, ob zu wiederholen ist. Bei der
While Schlaufe wird im Unterschied dazu am Anfang geprüft, ob die Schlaufe
noch ausgeführt werden soll und das bedeutet, dass sie eventuell nie
ausgeführt wird!
Do-while sieht so
aus:
do { Schlaufeninhalt
} while ( Bedingung);
While sieht so aus:
while ( Bedingung
) { Schlaufeninhalt }
Was müsste in unserem
Fall vorgekehrt werden, wenn man while anstatt do-while verwenden möchte?
Richtig: Der Variablen
zahl müsste vor der Schlaufe ein Wert kleiner 6 zugewiesen werden,
z.B. so wie bei i.
- Schreiben Sie
die Methode so um, dass eine while Schlaufe verwendet wird..
Aufgabe:
- Verpacken Sie
den while Loop in eine for Schlaufe so, dass z.B. 10 mal getestet
wird wie oft zu würfeln ist und lassen Sie sich den Durchschnitt
anzeigen. Betreiben Sie etwas Statistik: Ist es wirklich so, dass
der Durchschnitt sich umso besser der 6 annähert je mehr Versuche
Sie machen?
Ihr Programm hat
eine Schlaufe in einer Schlaufe: Die Loops sind verschachtelt. Das
ist eine sehr häufige Form. Oft sind auch zwei for Schlaufen oder zwei
while Schlaufen ineinander verschachtelt. Merken Sie sich gut, wie Sie
die Aufgabe gelöst haben, sie werden das noch oft brauchen!
|

|