11.2.1 While-Schleife
 
while(..){..} Die einfachste Art eine Iteration zu realisieren ist die while-Schleife. Zum Schleifenkörper zählen wir alle Anweisungen, die wiederholt ausgeführt werden sollen. In der Normsprache (noch Umgangssprache fast Programmiersprache) hat sie folgende Gestalt: 
Normsprache In der Normsprache, sie ist noch Umgangssprache, kommt aber der Syntax einer Computersprache schon sehr nahe, schaut eine while-Schleife so aus:
Wiederhole solange (Bedingung wahr)
Anweisung|Anweisungsblock

Vor dem Einstieg in den Schleifenkörper - dort steht, was wiederholt werden soll - wird ein boolescher Ausdruck (=Bedingung) ausgewertet. Ist sein wert true, beginnt der Rechner mit der Abarbeitung der Anweisungen, bzw. des Anweisungsblocks im Schleifenkörpers. Nach dem ersten Durchgang wird vor dem zweiten Einstieg in die Schleife die Bedingung erneuten ausgewertet. Erst wenn die Bedingung den wert false liefert, wird die Schleife beendet. Man erkennt, dass die Bedingung im Schleifenkörper selbst manipuliert werden muss, sonst hätte man, falls die erste Einstiegsbedingung true wäre, eine Endlosschleife konstruiert.

 

Struktogramm Wie wir schon bei den Verzweigungen gesehen haben, helfen Struktogramme ein Programm oder Teile eines Programms überschaubarer zu machen

 

Java-Syntax
while(<Bedingung>){
   Anweisung_1;
   Anweisung_2;
   ....
   Anweisung_n;
}

 

Beispiel 1
download:
WhileTest.java
Wir wollen 20 mal auf den Bildschirm schreiben: "Hallo ich bin es". Statt die Ausgabe-Anweisung System.out.println("Hallo ich bin es"); zwanzig mal in den Quelltext zu schreiben, verwenden wir lieber eine while-Schleife:
public class WhileTest {
  public static void main (String args[]) {
    int zaehler = 0;
    while(zaehler< 20){
       System.out.println("Hallo ich bin es");
       zaehler++;
    }
  }
}

Prüfen Sie nach, dass tatsächlich die Ausgabe 20 mal aufgerufen wird. Wie müsste man die Initialisierung der Zählervariablen ändern, wenn man in der Schleifenbedingung zaehler<=20 schreiben wollte?

 

Beispiel 2

Download:
Fakultaet.java
 

Ein schon etwas anspruchvolleres Programm, das eine while-Schleife benutzt, ist das nächste Beispiel. Es zeigt, wie man die Fakultät einer Zahlberechnen.
import info1.*;
public class Fakultaet{
   public static void main(String[] args){
      System.out.print("n: ");
      int n = Console.in.readInt();
      int fakultaet = 1;
      int faktor = 1;
      while (faktor <= n){
        fakultaet = fakultaet*faktor;
        System.out.println(fakultaet);
        faktor++;
      }
   }
}

Ein sog. Schreibtischtest verdeutlicht, was bei den einzelnen Programmschritten geschieht. Ein Schreibtischtest ist eine Tabelle, in die alle Variablen eingetragen und "Entwicklung" ihrer Werte verfolgt werden. Dabei entspricht eine Zeile der Tabelle, jeweils einem Schleifendurchgang

Initialisierungsdaten: faktor=1, fakultaet =1, n = 5 z.B.

faktor in Bedingung Bedingung fakultaet vor der Zuweisung fakultaet nach der Zuweisung faktor
1 true 1 1 2
2 true 1 2 3
3 true 2 6 4
4 true 6 24 5
5 true 24 120 6
6 false      

Die Methode fakt(...)

Download:
Mathematik.java
FaktTest.java


Wir können unsere Klasse Mathematik um die Methode fakt(int a): long erweitern:

public static long fakt(int a){
   int faktor = 1;
   long fakt = 1;
   while (faktor <= a){
     fakt *= faktor;
     faktor++;
   }
   return fakt;
}

Nebenbei lernen wir, dass Methoden und Variable den gleichen Namen haben können. fakt(...) ist eine Methode fakt eine Variable. Die Variable ist lokal in der Methode fakt(...) deklariert, ist deshalb in den anderen Methoden der Klasse Mathematik und und schon gar nicht außerhalb bekannt.
 

Beispiel 3

Download:
Quadrat.java

 

Oft möchte der Bediener selbst entscheiden, wann er eine Schleife abgebrochen haben möchte. Das nächste Beispiel stellt eine solche Variante vor.
import info1.*;
public class Quadrat{
  public static void main(String[] args){
    boolean weiter = true;
    int a = 1;
    while (weiter){
      System.out.println(a*a);
      System.out.print("weiter? (j/n) :");
      a++;
      weiter = 'j'==Console.in.readWord().charAt(0);
    }
  }
}

Anmerkungen zum Programm:
Die boolesche Variable
weiter muss auf true gesetzt sein, dass die Schleife überhaupt durchlaufen wird.
Man beachte die Art, wie
weiter in der Schleife neu gesetzt wird. Es lohnt, sich diese Routine zu merken: Über die Tastatur wird eine Zeichenkette eingelesen - Console.in.readWord() - Von diesem String wird das erste Zeichen als char herausgeschnitt - charAt(0) und mit dem Zeichen 'j' auf Gleichheit verglichen. D.h. aber 'j'==Console.in.readWord().charAt(0) wird zu true oder false ausgewertet und dieser Wert wird schließlich in weiter gespeichert. In den Kapiteln über Strings und Characters werden wir näher auf diese Routine eingehen.

zu den Hausaufgaben  
zur Startseite www.pohlig.de (C) MPohlig 2003