while-Schleifen in Java

Schleifen dienen dazu, bestimmte Anweisungen oder Vorgänge immer wieder abzuarbeiten.

Eine Schleife besteht aus:

  1. Der Schleifenbedingung
  2. Den Rumpf

Die Schleifenbedingung prüft unter welcher Bedingung die Wiederholung ausgeführt wird. Sie muss vom Typ boolean sein, also true oder false.
Ist die Bedingung wahr, dann führe die Schleife aus und ist die Bedingung falsch, dann beende die Schleife.

 

Die while-Schleife prüft vor jedem Schleifeneintritt die Schleifenbedingung.

while (Ausdruck)
       Anweisung

Der Ausdruck wird vor jedem Schleifendurchgang neu ausgewertet. Ist das Ergebnis true, wird der Rumpf ausgeführt. Ist das Ergebnis false, ist die Schleife beendet.

 

Endlosschleifen

Dieser Fall tritt ein, wenn die Bedingung immer wahr ist. Dies bedeutet das Aus für jedes Programm.

 

Schleifenbedingungen und Vergleiche

Beispiel 1:

 int a = wert;

 while ( a != 7)
       a++;

Dieser Vergleich kann problematisch werden, wenn a den Starwert 8 oder höher hat. Hier wird der Schleifenrumpf solange durchlaufen, bis wir durch einen Überlauf wieder bei 0 beginnen und dann bei 7 landen.

 

Besser wäre:

 int a = wert;

 while ( < 7)
       a++;

Jetzt läuft der Interpreter bei Zahlen größer als 7 nicht endlos weiter sondern stoppt die Schleife sofort.

 

Hier ein kleines Programm welches einen Text 20 mal ausgibt:

public class Main {
 
    public static void main(String[] args) {
 
        int zaehler = 20;
        int zahl = 0;             //zahl wird der Startwert 0 zugewiesen
 
        while (zahl <= zaehler)
        {
            System.out.println("Hallo liebe Freunde!");
            zahl ++;               //Erhöht zahl um 1 (zahl=zahl+1)
        }
    }
}

 

Beispiel für eine Endlosschleife:

int zaehler = 20;
        int zahl = 0;
 
        while (zahl <= zaehler)
        {
            System.out.println("Hallo liebe Freunde!");
        }

 

Rechenungenauigkeiten bei Gleitkommazahlen

public class Main {

    public static void main(String[] args) {

        double zaehler = 1.0;
        double zahl = 0.0;

        while (zahl != zaehler)
        {
            System.out.println(zahl);
            zahl +=0.1;    //Erhöht zahl um 0.1 
        }
    }
}

 

darauf folgt dieses Ergebnis:

0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
1.2
1.3
1.4000000000000001
1.5000000000000002

 

Man müsste hier einen Vergleich zweier Gleitkommazahlen durchführen und eine erlaubte Abweichung berücksichtigen.

if ( Math.abs(a - b) <= epsilon)         // epsilon ist die Abweichung zweier Werte

Math.abs(x)

... berechnet von einer Zahl x den Absolutwert.