Zurück zur Einstiegsseite

Wiederholung mit fester Anzahl

Die Methode dreierreihe() zu Beginn des Kapitels Sequenz ist etwas umständlich, weil man die Sequenz
  karol.hinlegen();
  karol.schritt();

mehrmals aufschreiben muss. Noch unangenehmer wäre es, wenn man beispielsweise eine Steinreihe der Länge 100 legen möchte.
Eine elegantere Umsetzung der Lösung gelingt unter Verwendung einer Wiederholungsanweisung. Nachdem die Anzahl der Wiederholungen zu Beginn bereits bekannt ist, nutzt man in diesem Fall die Wiederholungsanweisung mit Zähler:

  public void dreierreihe2() {
    for (int i=1; i<=3; i=i+1) {
      karol.hinlegen();
      karol.schritt();
    }
  }
Struktogramm zur links angegebenen Methode

Hefteintrag:

Wiederholung mit fester Anzahl: Bei der Wiederholung mit fester Anzahl wird eine Sequenz mit einer vorher festgelegten Anzahl wiederholt. Sie wird verwendet, wenn die Anzahl der Wiederholung bereits vor dem Durchlauf bekannt ist.

In Java wird diese realisiert durch eine for-Anweisung, oft auch for-Schleife genannt. Kompliziert erscheint auf den ersten Blick die Syntax zwischen den runden Klammern:
Es wird zunächst eine Zählvariable angelegt, hier int i=1. Dies ähnelt stark einer Attributdeklaration. Nach Angabe des Datentyps (typischerweise int) und des Namens wird dieser Variable gleich auch ein Startwert, hier 1, zugewiesen. Jetzt werden die Anweisungen ausgeführt, die in den geschweiften Klammern stehen. Danach wird der Wert der Zählvariablen erhöht (i=i+1). Jetzt werden wieder die Anweisungen in der Klammer ausgeführt, dann i erhöht, usw. Dies wird  durchgeführt, solange die Bedingung i ≤ 3  erfüllt ist, d.h. wenn die Zählvariable nach dreimaligem Durchlauf den Wert 4 angenommen hat ist die for-Schleife beendet.

Hinweis: Die Zuweisung i=i+1 kann man abgekürzt auch als i++ schreiben.

Die Abbildung neben dem gerade besprochenen Quellcode zeigt das zugehörige Struktogramm.

Lesen Sie nun im Java-Überblick den entsprechenden Abschnitt über Wiederholungen mit fester Anzahl durch.

Arbeitsauftrag 1

Karol soll nun ein Quadrat aus vier Steinen legen. Rechts sehen Sie eine Darstellung der möglichen Lösung. "Übersetzen" Sie die Vorgabe unter Verwendung einer Wiederholungsanweisung mit fester Anzahl in eine entsprechende Methode für JavaKarol.
Lösung

Arbeitsauftrag 2

Nun sollen Sie ein wenig mit der Zählvariable "herumexperimentieren". Betrachten Sie die Methode gehen(). Die Zeichenkette xxx soll dabei jeweils durch die Angaben der Teilaufgaben 1 bis 4 ersetzt werden. Wie viele Wiederholungen werden jeweils durchgeführt? Testen Sie ggf. die Methode.
  public void gehen() {
    for ( xxx ) {
      karol.schritt();
    }
  }
  1. int k=1; k<6; k=k+1
  2. int i=0; i<=6; i=i+1
  3. int a=0; a<6; a=a+1
  4. int k=0; k<=6; k=k+2
Hinweis: Der Name der Zählvariablen ist, wie die obigen Beispiele zeigen, frei wählbar.
Lösung

Arbeitsauftrag 3

Benennen Sie die obige Methode dreierreihe2() um zu steinreihe() und ergänzen Sie den Quelltext an den markierten Stellen so, dass der Benutzer über einen Parameter bestimmen kann, wie lange die Steinreihe werden soll:

  public void steinreihe (???) {
    for (???){
      karol.hinlegen();
      karol.schritt();
    }
  }

Falls Sie Probleme haben... einen Tipp erhalten Sie hier.

Lösung.

Schreiben Sie in Ihr Heft:

Geschachtelte Wiederholung:

In der auszuführenden Sequenz einer Wiederholungsanweisung können weitere Wiederholungsanweisungen vorkommen. Man spricht dann von geschachtelter Wiederholung.

Damit sich die for-Anweisungen nicht gegenseitig beeinflussen, muss die Zählvariable in jeder der geschachtelten Wiederholungsanweisungen anders heißen!

Bei den Struktogrammen kann also in jedem eine Sequenz symbolisierenden Rechteck wieder ein weiteres Wiederholungs-Element stehen.

Arbeitsauftrag 4

Betrachten Sie die folgende Methode. Stellen Sie sich bildlich vor, was Karol macht. Machen Sie eine Notiz dazu auf einem Schmierblatt. Überprüfen Sie anschließend in BlueJ, was die Methode bewirkt.

  public void ??? {
    for (int i=0; i<4; i++) {
      for (int k=0; k<3; k++){
        karol.hinlegen();
        karol.schritt();
      }
      karol.linksDrehen();
    }       
  }
Struktogramm zur links angegebenen Methode

Lösung

In der zu wiederholenden Sequenz einer for-Anweisung kann auch der aktuelle Wert der Zählvariable (z.B. i) verwendet werden. Ein entsprechendes Beispiel findet sich im Java-Überblick. Lesen Sie diesen Bereich genau durch und markieren sie ihn.

Arbeitsauftrag 5

Verwenden Sie eine for-Anweisung, um die im Folgenden abgebildete Ausgabe zu erzeugen. Skizzieren Sie anschließend ein Struktogramm zu Ihrer Methode.

Einen Tipp erhalten Sie hier. Probieren Sie es zunächst selbst und vergleichen Sie dann Ihre Ergebnisse mit der Lösung.


Zusatzaufgaben

Bearbeiten Sie die folgenden Arbeitsaufträge nur, wenn Sie gut in der Zeit liegen.

Wie rechts abgebildet soll Karol eine Treppe bauen. Dies soll auf zwei Arten umgesetzt werden:

Arbeitsauftrag Z1

Zuerst baut Karol die unterste Reihe, dann die nächsthöhere Reihe, usw. Verwenden Sie dabei die for-Anweisung. Greifen Sie wenn möglich auf bereits vorhandene Methoden zurück.

Probieren Sie es zunächst selbst und vergleichen Sie dann Ihre Ergebnisse mit der Lösung.

Arbeitsauftrag Z2

Zuerst erstellt Karol das linke Ende, dann geht er einen Schritt zurück und baut dann einen Stapel aus zwei Steinen. Wieder wandert er einen Schritt zurück und baut einen dreistöckigen Stapel usw.
Verwenden Sie möglichst gezielt for-Anweisungen.

Probieren Sie es zunächst selbst und vergleichen Sie dann Ihre Ergebnisse mit der Lösung.


Zurück zur Einstiegsseite