~Java4Beginners~
~Java4Beginners~

Schleifenanweisung while

Schleifenanweisungen dienen dazu eine Reihe von Anweisungen so lange zu wiederholen, bis eine Abbruchbedingung erfolgt ist.
Grundsätzlich unterscheiden wir bei den Schleifenanweisungen kopfgesteuerte Schleifen und fußgesteuererte Schleifen. Bei den kopfgesteuerten Schleifen findet die Abbruchbedingung gleich zu Beginn der Schleifenanweisung statt. D. h. wenn eine Abbruchbedingung von Anfang an erfüllt ist, wird diese Schleife nicht durchgeführt. Bei den Fußgesteuerten Schleifen findet die Prüfung der Abbruchbedingung am Schleifenende statt, d. h. die Schleifenanweisung wird mindestens einmal durchlaufen.

while

Bei der While-Schleife handelt es sich um eine kopfgesteuerte Schleife. Damit die Schleife durchlaufen wird, muss die nach dem Schlüsselwort while gestellt Bedingung wahr sein.
Erst wenn die Bedingung false ergibt, oder eine in den Schleifenkörper eingearbeite break-Anweisung ausgelöst wird, wird die Schleife verlassen.

while (Wiederholungsbedingung)
{
    Anweisung(en);
}
In den Schleifenkörpfer können entweder eine Reihe von Blockanweisungen hinterlegt sein, oder weitere Schleifen- oder Verzweigungsanweisungen.

In folgendem Beispielprogramm werden 2 Variablen deklariert. Einmal eine Variable teiler vom Datentyp int und eine Variable eingabe, ebenfalls vom Datentyp int. Die while-Schleife soll solange durchlaufen werden, so lange der Wert der Variablen eingabe 1 ist. Damit der Wert auch beim ersten erreichen des Schleifenkopfes 1 hat, initialisieren wir diese gleich mit 1. Die Variable teiler initialisieren wir mit 5.

Im Schleifenkörper selber erfolgt als erstes eine Verzweigungsanweisung vom Typ if-else. Wenn die Variable teiler den Wert 0 angenommen hat, soll eine Konsolenausgabe erfolgen, dass eine Division durch 0 nicht erlaub ist. Ansonsten soll eine Ausgabe erfolgen, wie viel 10 geteilt den Wert von teiler ist, und zwar als int-Division. Nach dem Ergebnis soll noch der Rest der Division ausgegeben werden.

Beispiel: 10 / 3 = 3 Rest 1

Da in der if-else-Anweisung jeweils nur 1 Anweisung steht, können die geschweiften Blockklammern weggelassen werden.

Nach der if-else-Anweisung wird der Wert der Variable teiler um 1 erniedrigt.

Um einen Abbruch zu erzwingen, wurde eine if-Abfrage nun eingebaut, welche dafür sorgt, dass bei einem Wert der Variablen Teiler von -5 die aktuelle Schleife mittels break-Anweisung verlassen wird.

Zum Ende erfolgt eine Abfrage, ob der Teiler um 1 erniedrigt werden soll. Durch die Konsoleneingabe von 1, welche in der Variablen eingabe abgelegt wird, soll der Teiler um 1 erniedrigt werden. Da am Schleifenkörperende das Programm wieder am Schleifenbeginn anfängt, hat der Wert eingabe nun entweder eine 1, welches dazu führt, dass die Schleife wieder durchlaufen wird, oder der Wert ist ein anderer, was dazu führt, dass die Schleife nicht mehr ausgeführt wird, sondern es mit der ersten Anweisung nach dem Schleifenkörper weitergeht.



import java.util.Scanner;

/**
 * Beispiele einer while-Schleife
 * @author Markus Badzura
 */
public class SchleifeWhile 
{
    static Scanner sc = new Scanner(System.in);
    public static void main (String[] args)
    {
        int teiler = 5;
        int eingabe = 1;
        while (eingabe == 1)
        {
            if (teiler==0)
                System.out.println("Division durch 0 nicht erlaubt.");
            else
                System.out.println("10 / "+teiler+" ist: "+(int)(10/teiler)+" Rest: "+10%teiler);
            teiler--;
            if (teiler==-5) break;
            System.out.println("Teiler um 1 erniedrigen? (1) ja ");
            eingabe=sc.nextInt();
        }
    }
}

Beispiel Fakultät

Die Fakultätist in der Mathematik eine Funktion, die einer natürlichen Zahl das Produkt aller natürlichen Zahlen (ohne Null) kleiner und gleich dieser Zahl zuordnet. Sie wird durch ein dem Argument nachgestelltes Ausrufezeichen („!“) abgekürzt. Die Fakultät von 5! wäre somit: 5!=5*4*3*2*1

Unserer Funktion hat als Parameter einen Int-Wert. Dieser wird vor der while-Schleife der Variablen ergebnis übergeben. Die While-Schleife wird nun so lange durchlaufen, solange dieser int-Wert >1 ist. Im Schleifenkörper selber wird der int-Wert um 1 erniedrigt und das ergebnis wird neu berechnet, nämlich ergebnis * int-Wert. Das Ergebnis dieser Berechnung wird der Variablen Ergebnis zugewiesen.

Die Schleifenbedinung >1 ergibt sich, da vor der Berechnung des Ergebnisses der Int-Wert um 1 erniedrigt wird. Sollten wir als Wiederholungsbedingung die 1 mit einschließen, würde das Ergebnis immer 0 lauten, da 1 - 1 = 0, und eine Multiplikation mit 0 ergibt 0.

Fakultäten werden benötigt, um eine Anzahl möglicher Ereignisse zu ermitteln. Nehmen wir an, es wird ein Dart-Turnier durchgeführt mit 6 Teilnehmern. Wieviele verschiedene Möglichkeiten ergibt es für eine abschließende Reihenfolge? Für Platz 1 haben wir 6 mögliche Kanditaten, für Platz 2 sind nur noch 5 mögliche Kanditaten da, da 1er der 6 ja bereits Platz 1 hat, usw.

Bei Methoden wurden bereits die Statischen Methoden angesprochen, welche hier nun praktische Anwendung finden.

Da Fakultäten öfters benötigt werden könnten, erstellen wir eine statische Methode in einer neuen Klasse mit dem Namen Stat.java. In diese neue Klasse kopiere ich den Lösungsalgorithmus für Fakultäten.


/**
 * Bibliotheksklasse mit statischen Methoden für das Arbeiten innerhalb des
 * Projektes
 * @author Markus Badzura
 */
public class Stat 
{
     /**
     * Berechnung der Fakultät einer Zahl mit while-Schleife
     * @param fakultaet Zahl, von welcher die Fakultät ermittelt werden soll.
     * @return Fakultät der übergebenen Zahl
     */
    static long fakultaetWhile(int fakultaet)
    {
        long ergebnis = fakultaet;
        while (fakultaet>1)
        {
            fakultaet--;
            ergebnis = ergebnis * fakultaet;
        }
        return ergebnis;
    }
}
nach oben Java4Beginners -- Seitenversion 1.0 -- Stand: 2017-05-10