Die bedingte Wiederholung

Wiederholungen lassen sich auch mit einer anderen Kontrollstruktur umsetzen, der bedingten Wiederholung. Die Tabelle zeigt zwei Möglichkeiten, eine Sequenz unter einer bestimmten Bedingung zu wiederholen.

while-do do-while
Sprachkonstrukt
while(//Bedingung){
   //Sequenz }
do{ //Sequenz
  }
while(//Bedingung)
Struktogramm
Erläuterung Die Bedingung wird überprüft und gegebenenfalls die Sequenz ausgeführt. Anschließend erfolgt eine erneute Überprüfung der Bedingung. Die Sequenz wird auf jeden Fall einmal ausgeführt. Im Anschluss wird die Bedingung überprüft und gegebenenfalls die Sequenz wiederholt.
Meist wird die while-do-Schleife in Programmen verwendet. Gelegentlich vereinfacht sich der Quellcode aber bei Nutzung der do-while-Konstruktion.

Beispiel 1:

Auf der Konsole werden in absteigender Reihenfolge die natürlichen Zahlen bis 100 ausgegeben.

public class Algorithmen{
    public void countdown(){
        int i=100;
        while(i>0){
            System.out.println(i);
            i=i-1;
        }
    }
}

Du erinnerst dich vielleicht, dass du ein ähnliches Programm mit Hilfe der for-Schleife schon geschrieben hast.

for-Schleifen, do-while-Schleifen und while-do-Schleifen sind gleichwertig und können jeweils durch eine andere Schleifenkonstruktion ersetzt werden.

Hier die Lösung zum Countdown-Problem mit den drei verschiedenen Schleifenarten.

while-do do-while for
public void countdown(){
   int i=100;
   while(i>0){
      System.out.println(i);
      i=i-1;
   }
}
public void countdown(){
   int i=100;
   do{
      System.out.println(i);
      i=i-1;
   }
   while(i>0)
}
public void countdown(){
   for(int i=100; i>0; i=i-1){
      System.out.println(i);
   }
}

Beispiel 2:

Eine Methode, die Zahlen auf ihre Primzahleigenschaft untersucht. Im letzten Kapitel hast du bereits eine solche Methode mit Hilfe einer for-Schleife geschrieben.
Hier im Vergleich dazu eine Variante mit einer while-Schleife.

for-Schleife while-Schleife
	boolean istPrimzahl(int z) {
		boolean antwort = true;
		for (int teiler = 2; teiler < z; teiler++) {
			if (z % teiler == 0) {
				antwort = false;
			}
		}
		return antwort;
	}
    boolean istPrimzahl(int z) {
        boolean antwort = true;
        int teiler=2;
        while(teiler < z) {
            if (z % teiler == 0) {
                antwort = false;
            }
            teiler=teiler+1;
        }
        return antwort;
    }

Aufgabe 1:

Programmiere eine Animation, bei der zwei Kreise auf dem Zeichenfenster sich von links nach rechts bewegen. Ein Kreis befindet sich dabei rechts von dem anderen und wird von ihm eingeholt. Die Animation endet, wenn beide Kreise die gleiche waagrechte Position besitzen.
Ein Grundgerüst des Codes mit Hilfskommentaren findest du, falls nötig,

hier

hier

import tools.*;
public class BedingteWiederholung
{
    public void aufholjagd(){
        // Variablen für die x-Positionen der beiden Kreise definieren
        // Startwerte der x-Positionen festlegen
        while(........){   // Bedingung für die Wiederholung
            // Zeichenfenster löschen
            // die beiden Kreise zeichnen
            // 20 Millisekunden warten
            // die x-Koordinaten der beiden Kreise verändern
        }    
    }
}


Du benötigst noch mehr Hilfe. Also gut der Quelltext, bei dem du nur noch die Lücken …. füllen musst.

Zweite Hilfe

Zweite Hilfe

import tools.*;
public class BedingteWiederholung
{
    public void aufholjagd(){
        int x1, x2;  // Variablen für die x-Positionen der beiden Kreise definieren
        x1=....; // Startwerte der x-Positionen festlegen
        x2=....; // der zweite Kreis befindet sich weiter rechts         
        while(....){   // Bedingung für die Wiederholung, solange der erste Kreis sich links vom zweiten befindet
            Zeichenfenster.loeschen();  // Zeichenfenster löschen
            Zeichenfenster.zeichneKreis(.... ,100,10);  // die beiden Kreise zeichnen
            Zeichenfenster.zeichneKreis(.... ,100,10);
            Zeichenfenster.warteSekunden(0.02); // 20 Millisekunden warten
            x1=x1+....;  // die x-Koordinaten der beiden Kreise verändern
            x2=x2+....;  // der Kreis 2 bewegt sich schneller als Kreis 1
        }    
    }
}

Aufgabe 2: Fehlerhaft

Im Programmcode der folgenden Funktion, die den ganzzahligen Anteil zweier Zahlen berechnen soll, haben sich Fehler eingeschlichen. Verbessere diese

public int ganzzahlDivision(int a, int b) {
	int i = 1;
	while (a <= b) {
		a = a - b;
		i = i + a;
	}
	return i;
}

Lösung

Lösung

public int ganzzahlDivision(int a, int b) {
	int i = 0;          // Zähler für die Anzahl der Subtraktionen a-b
	while (a >= b) {    // solange a größer gleich b ist, wird b von a abgezogen
		a = a - b;  // und 
		i = i + 1;  // der Zähler um eins erhöht 
	}
	return i;
}
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
Drucken/exportieren