Die Wiederholung mit fester Anzahl

Von dem Programm Robot Karol kennst du vielleicht noch Programme, bei der eine Sequenz eine bestimmte Anzahl oft wiederholt wurde. Auch mit Java lässt sich dies mit einer sogenannten for-Schleife umsetzen.

Beispiel 1:

public void zahlenBis10(){

   for(int i=1; i<=10; i=i+1){
      System.out.println(i); 
   }
   
}

Das zugehörige Struktogramm:

Die Methode ohne Parameter und Rückgabe definiert eine Variable i, die nur innerhalb der for-Schleife verwendbar ist, und setzt diese auf den Wert 1. Wenn i einen Wert kleiner oder gleich 10 besitzt wird die in der geschweiften Klammer stehende Sequenz ausgeführt. Nach jedem Durchlauf der Sequenz wird der Wert für i um 1 erhöht und erneut die Bedingung i⇐10 geprüft. Das Programm schreibt also die Zahlen von 1 bis 10 untereinander auf die Konsole.

Beispiel 2:

public void countdown(){

   for(int a=50; a>0; a=a-2){
      System.out.println(a); 
   }
   System.out.println("Zero!"); 
      
}

Die Methode schreibt absteigend die Zahlen von 50 bis 2 in Schritten von 2 auf die Konsole und ergänzt anschließend das Wort 'Zero!'.

Merke: Innerhalb der runden Klammer, die dem Schlüsselwort for folgt, wird üblicherweise eine Variable definiert und gleichzeitig ein Startwert festgelegt. Nach einem Semikolon wird die Bedingung für die Wiederholung der Sequenz festgelegt. Anschließend folgt nach einem weiteren Semikolon eine Anweisung, die jedesmal ausgeführt wird, wenn die Sequenz abgearbeitet wurde.

Beispiel 3:

Mit Wiederholungen lassen sich auch Zeichenobjekte bewegen. Das folgende Programm lässt einen Kreis von links nach rechts wandern. Probiere das Beispiel aus. Dazu muss sich in deinem Projektordner der Ordner tools befinden.

import tools.*;

public class Animation {

    public void bewegeBall(){
        for(int x=100; x<500; x=x+1){
            Zeichenfenster.loeschen(); // lösche das Zeichenfenster
            Zeichenfenster.zeichneKreis(x, 100, 20); // zeichne einen Kreis mit Radius 20px
            Zeichenfenster.warteSekunden(0.01); // 0,01 Sekunden warten
        }
    }

}

Wie lässt sich die Geschwindigkeit des Balles vergrößern?

Antwort

Antwort

Die Zeit, die nach dem Zeichnen des Balles gewartet wird, kann verkleinert werden. Alternativ kann auch die Schrittweite in der for-Schleife erhöht werden.

 for(int x=100; x<500; x=x+2){
   ....
 }

Beispiel 4:

for-Schleifen lassen sich auch ineinander schachteln. Das folgende Programm schreibt das kleine Einmaleins auf die Konsole.

public void kleinesEinmaleins(){

   for(int faktor1=1; faktor1<=10; faktor1=faktor1+1){
      
      for(int faktor2=1; faktor2<=10; faktor2=faktor2+1){
         System.out.println(faktor1 + " mal " + faktor2 + " ist " + faktor1*faktor2); 
      }
      
   }
      
}

Aufgabe 1: Quadratzahlen

Schreibe ein Methode public void quadratzahlen(), das die Quadrate der Zahlen von 1 bis 20 ausgibt.
Erweitere die Methode public void quadratzahlen(int n), so das die Quadrate der Zahlen von 1 bis n ausgegeben werden.

Aufgabe 2: Ballkollision

Schreibe eine Methode, bei der sich zwei Kreise aufeinander zubewegen und stoppen, wenn sie sich berühren.

Aufgabe 3: Primzahlprüfer

Implementiere eine Methode, die eine gegebene Zahl überprüft, ob sie eine Primzahl ist.

public boolean istPrimzahl(int z)  

Keine Idee? Hier ein

Tipp:

Tipp:

Wenn z eine Primzahl ist, besitzt sie außer der Zahl Eins und sich selbst keinen weiteren Teiler. Das Programm muss also alle Zahlen i (1 < i < z) überprüfen, ob sie z teilen. Sollte es eine solche Zahl geben, so ist z keine Primzahl.
Bei unserem möglichen Programm verwenden wir eine Schleife die eine Variable i von 2 bis z-1 hochzählt. Innerhalb der Schleife wird mit einer if-Konstruktion überprüft, ob i die Zahl z teilt, also gilt z%i gleich Null. Wenn das zutrifft muss dies in einer Variablen, die zu Beginn der Methode definiert wurde gespeichert werden. Nachdem alle möglichen Teiler geprüft wurden, wird die Antwort zurückgegeben.
Hier ein Codegerüst:

public boolean istPrimzahl(int z){
   boolean antwort=true; // nimm an, dass z eine Primzahl ist
   for(int i=2; .... ; ....){
      if(z%i==0){        // es gibt einen weiteren Teiler von x
         antwort=......; // z ist also keine Primzahl
      }
   }
   return .....; // Antwort zurückgeben
}


Probiere deine Methode bei den Zahlen 2, 4, 13, 127, 95741 und 479001599 aus.

Lösung

Lösung

Die Zahlen 2, 13 und 479001599 sind Primzahlen, alle anderen nicht.


Dein Programm funktioniert nicht oder du warst nicht in der Lage ein Programm zu erstellen? Hier ist eine mögliche

Lösung:

Lösung:

public boolean istPrimzahl(int z){
   boolean antwort=true; // nimm an, dass z eine Primzahl ist

   for(int i=2; i<z; i=i+1){    //Überprüfung aller Zahlen von 2 bis z-1

      if(z%i==0){        // es gibt einen weiteren Teiler von x
      
         antwort=false; // z ist also keine Primzahl
      }

   }

   return antwort; // Antwort zurückgeben
}

Das Programm prüft im Grunde unnötig viele Zahlen. Es reicht aus die Zahlen von 2 bis zur Wurzel von n zu untersuchen.

Aufgabe 4: Primzahlen

Schreibe eine Methode

public void primzahlen()

die alle Primzahlen von 2 bis 10000 auf der Konsole ausgibt.

Nutze dazu die Methode aus Aufgabe 2, um zu überprüfen, ob eine Zahl eine Primzahl ist.
Du benötigst einen Hinweis. Hier findest du ein passendes

Struktogramm

Struktogramm

Verändere die Methode in

public void primzahlen(int n),

so dass alle Primzahlen bis n dargestellt werden.


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