Schleifen (2)

Was eine Schleife haben muss

Das folgende Programm gibt die Zahlen von 1 bis 10 auf dem Bildschirm aus: . Dazu richtet es eine Variable i ein, die vor Beginn der Schleife initialisiert (mit einem Anfangswert belegt) und bei jedem Schleifendurchlauf mit der Anweisung i++ hochgezählt wird. Ist die Ausführungsbedingung i<=10 fürs Weitermachen nicht mehr gegeben, so wird die Schleife verlassen und das Programm in unserem Fall beendet.


public class WhileZähler {
  public static void main(String[] args) {
    int i;                                      // Deklaration von i
    i = 1;                                      // Initialisieren von i
    do {                            
      System.out.print(" "+i);
      i++;                                      // Hochzählen von i
    } while (i<=10);                            // Ausführungsbedingung
  }
}


Alles in einer Klammer: Die For-Schleife

Weil Zählschleifen häufig gebraucht werden, hat man ihnen eine übersichtlichere Kontrollstruktur spendiert, die For-Schleife:
Hier steht alles, was zum Zählen benötigt wird, im Schleifenkopf. Es sind drei Anweisungen:
- eine Laufvariable wird deklariert und initialisiert (hier mit int i=1),
- eine Ausführungsbedingung wird angegeben (hier i<=10)und
- es wird angegeben, was mit der Laufvariablen bei jedem Schleifendurchgang geschehen soll (hier i++) .


public class ForZähler {
  public static void main(String[] args) {
    for (int i=1; i<=10; i++) {
      System.out.print(" "+i);
    }
  }
}


Falls Sie schon einmal mit Basic oder Pascal programmiert haben, sollten Sie sich einprägen, dass in Java die Schleifenbedingung in Java keine Abbruchbedingung, sondern eine Ausführungsbedingung ist. Die Schleife wird nicht ausgeführt, bis ein bestimmter Zustand eintritt, sondern solange ein bestimmter Zustand gegeben ist. Auch muss die Laufvariable in Java nicht unbedingt ein integer sein und i heißen. Überdies können Bedingung und Veränderungsanweisung recht frei formuliert sein. Probieren Sie das:

public class ForZähler2 {
  public static void main(String[] args) {
    for (String s=""; s.length()<=10; s=s+"x") {
      System.out.println(s);
   
}
 
}
}

Die Laufvariable "lebt" übrigens - wie alle Variablen - nur in dem Anweisungsblock, in dem sie deklariert wurde, und das ist hier der Block der for-Schleife. Sobald die geschweifte Klammer geschlossen ist, kann man nicht mehr auf sie zugreifen.

Verzögerungstaktik

Das folgende Programm zählt mit einer For-Schleife bis 100. Dabei kann man zusehen. Die Gemütlichkeit wird durch eine Zeitverzögerung von 500 Millisekunden bewirkt, die nach jeder Zahl eingeschoben wird. Die Exception, die durch die Zeitverzögerung ausgelöst werden könnte, wird bei Bedarf durch "throws Exception" auf die Benutzerebene geworfen.


public class Countdown {
  public static void main(String[] args) throws Exception {   // nötig wegen Sleep-Anweisung
    System.out.println("Countdown\n");
    for (int i=10; i>0; i--){
      System.out.print(" "+i);
      Thread.sleep(1000);                        // bewirkt eine Verzögerung von 1000 Millisekunden
    }
    System.out.println(" Start!");
  }
}


Aufgaben:

  1. Lassen Sie den Benutzer eingeben, von wo bis wo gezählt werden soll.
  2. Erweitern Sie das Programm so, dass man max (die größere Zahl) und min (die kleinere) in beliebiger Reihenfolge eingeben kann. Mit der Befehlsfolge int h=a; a=b; b=h; können Sie den Inhalt zweier Variablen a und b austauschen.
  3. Fordern Sie den Benutzer zur Eingabe eines beliebigen Anfangswerts auf. Verdoppeln Sie diesen durch for (double x = eingabe; x<1000000; x*=2) so lange, bis das Ergebnis über einer Million liegt. Zählen Sie die Verdoppelungsschritte.
  4. Schreiben Sie ein Programm, das nach Eingabe der Zahlen a und n die Potenz a hoch n durch fortgesetzte Multiplikation berechnet - je eine Variante unter Verwendung der do {} while()-Schleife, der while () {}-Schleife und der for-Schleife.
  5. Schreiben Sie ein Programm, das simuliert, wie sich die Temperatur einer Tasse Kaffee entwickelt, die beim Eingießen 85° warm ist und dann pro Minute 10% der Temperaturdifferenz zur Raumtemperatur von 20° verliert.
  6. Schreiben Sie ein Programm, das das kgV und den ggT zweier gegebener Zahlen ermittelt. 
    Mit der Bedingung if (a % b == 0) .. lässt sich prüfen, ob b ein Teiler von a ist.
  7. Deklarieren Sie die Integer-Variablen eins, zwei, drei, vier, fünf und sechs. Würfeln Sie zehn [hundert, tausend, zehntausend] Mal und erhöhen Sie jedes Mal die Variable der Zahl, die gewürfelt wurde: if (würfel ==1) {eins++;}.
    Geben Sie anschließend aus, wie oft jede Zahl gewürfelt wurde.
  8. Deklarieren Sie die Variablen zwei, drei, vier, fünf ... zwölf.
    Führen Sie den Versuch von Nr. 5 mit zwei Würfeln aus und führen Sie Buch über die Summen der beiden Würfe.