Home > Informatik > Stufe EF > Folge 4 > Folge 4.4

Folge 4.4: for-Schleifen

Eine weitere Art von Schleifen neben den while- und den do-while-Schleifen sind die for-Schleifen, auch Zählschleifen genannt. Während bei einer while-Schleife zu Beginn der Schleife noch nicht feststeht, wie oft sie durchlaufen wird, setzt man for-Schleifen ein, wenn man bereits beim Schreiben des Programms weiß, wie oft die Schleife ausgeführt werden soll. Ein schönes Beispiel ist die Aufgabe, die Summe der Zahlen 1, 2, 3, …, 100 zu bilden. Natürlich kann man hierfür eine while-Schleife einsetzen, aber mit einer for-Schleife geht das einfacher:

while-Schleife for-Schleife
int sum = 0;
int i = 1;

while (i <= 100)
{
	sum += i;
	i++;
}
int sum = 0;

for (int i=1;i<=100;i++)
	sum += i;

Der Schleifenkopf

Der Schleifenkopf einer for-Schleife besteht aus drei Elementen. Zunächst wird die Laufvariable deklariert und initialisiert:

int i = 1;

In diesem Beispiel wird die Laufvariable i zunächst deklariert (int i) und gleichzeitig mit einem Startwert initialisiert (i = 1). Die Laufvariable muss natürlich nicht immer i heißen, aber es hat sich eingebürgert, Laufvariablen häufig so zu bezeichnen.

Das zweite Element des Schleifenkopfs ist die Schleifenbedingung. Genau wie bei einer while-Schleife wird die for-Schleife nur dann durchlaufen, wenn die Schleifenbedingung erfüllt ist:

i <= 100;

Solange die Laufvariable den Wert 100 noch nicht überschritten hat, wird die Schleife durchlaufen.

Das dritte Element des Schleifenkopfs ist schließlich die Inkrementation oder Dekrementierung der Laufvariable:

i++

In diesem Beispiel wird die Laufvariable i um 1 erhöht, allerdings erst, nachdem der Schleifenkörper vollständig durchlaufen wurde.

Aufgabe 4.4-1

Schreiben Sie eine Methode

public int fakultaet(int n)

welche die Fakultät einer natürlichen Zahl n berechnet und als int-Wert zurückliefert. Die Fakultät von n = 5 ist beispielsweise 1 * 2 * 3 * 4 * 5 = 120.

Syntax einer for-Schleife

Syntaxdiagramm einer for-Schleife

Syntaxdiagramm einer for-Schleife
Autor: Ulrich Helmich, 2020, Lizenz: Public Domain

Wie man dem Syntaxdiagramm gut entnehmen kann, besteht der Schleifenkörper einer for-Schleife aus einer Anweisungsliste. Eine Anweisungsliste ist

  • entweder leer,
  • besteht aus genau einer Anweisung oder
  • besteht aus mehreren Anweisungen, die durch geschweifte Klammern eingeschlossen sind. Nach jeder Anweisung steht ein Semikolon.

Eine Anweisung kann beispielsweise eine Zuweisung, ein Methodenaufruf, eine if-else-Anweisung, eine while-Schleife, eine do-while-Schleife oder auch eine weitere for-Schleife sein.

Geschachtelte for-Schleifen

Dadurch lassen sich Schleifen beliebig schachteln. Eine "äußere" Schleife kann also eine "innere" Schleife enthalten. Auch drei oder vier Schachtelungsebenen sind möglich, wenn auch nicht immer sinnvoll. Solche geschachtelten Strukturen kennen Sie bereits von while-Schleifen und if-else-Anweisungen.

for (int k = 20; k >= 2; k = k-2)
{
   for (int j = 1; j <= k; j++) otto.vor();
   otto.linksUm();
}

Das Objekt otto führt in der inneren for-Schleife jeweils k Schritte vorwärts aus. Der aktuelle Wert von k wird dabei von der äußeren for-Schleife festgelegt. Anschließend dreht sich otto nach links. Danach ist ein Durchlauf der äußeren Schleife beendet, und k wird um 2 verringert. Ist otto zunächst 20 Schritte vorwärts gegangen, so geht er beim nächsten Schleifendurchlauf nur noch 18 Schritte vorwärts und dreht sich anschließend erneut nach links.

Übungen

Aufgabe 4.5-2 (2 Punkte)

Was macht die folgende for-Schleife ?

for (int a = 1; a <= 10; a++)
{
   for (int b = 1; b <= 10; b++)
      System.out.printf("%6d", a*b);
   System.out.println();
}

Aufgabe 4.5-3 (5 Punkte)

Die folgende Konsolenausgabe soll einen Tannenbaum darstellen:

                           *
                          ***
                         *****
                        *******
                       *********
                      ***********
                     *************
                           *
                           *
                           *
                           *
                           *

Schreiben Sie eine Java-Methode, die mit Hilfe der Befehle System.out.print() und System.out.println() und mit Hilfe von for-Schleifen einen solchen Tannenbaum in die Konsole zeichnet.

Ergänzungsübung 4.5-4 (2 Punkte)

Machen Sie Ihre Methode flexibler: man soll die maximale Breite des Tannenbaums als Parameter an die Methode übergeben können. Im obigen Beispiel hat der Baum eine maximale Breite von 13.

Ergänzungsübung 4.5-5 (1 Punkt)

Die Methode soll noch flexibler werden: man soll auch die Höhe des Stammes als Parameter übergeben können. Im Beispiel ist der Stamm 5 Sterne hoch.

Aufgabe 4.5-6 (2 - 4 Punkte)

Schreiben Sie eine Klasse QFunktion (für quadratische Funktion), in deren Datenfeldern die Koeffizienten a, b und c einer quadratischen Funktion f(x) = ax2 + bx + c gespeichert sind.

Der Konstruktor soll diese drei Werte in Form von drei double-Parameter erhalten und dann in den Attributen speichern.

Schreiben Sie dann eine Ausgabe-Methode, welche die Funktion anzeigt. Hier gibt es drei unterschiedlich schwere Varianten. Angenommen, die drei Parameter haben die Werte 2, 0 und -3, dann könnten die Ausgaben so aussehen:

f(x) = 2.0*x*x + 0.0*x + -3.0

Dies ist die einfachste Form der Ausgabe, dafür gibt es 2 Punkte.

f(x) = 2.0*x*x + 0.0*x - 3.0

Hier werden die Vorzeichen der Koeffizienten berücksichtigt, daher wird der Plus-Operator vor dem letzten Koeffizienten nicht mit ausgegeben. Hierfür gibt es 3 Punkte.

f(x) = 2.0*x*x - 3.0

Falls ein Koeffizient den Wert 0 hat, wird gar nichts ausgegeben. Für diese Variante bekommen Sie 4 Punkte.

Informieren Sie sich vorher über die formatierte Ausgabe von Zahlen!

Aufgabe 4.5-7 (4 Punkte)

Erweitern Sie die Klasse QFunktion um eine neue Ausgabe-Methode,

public void ausgabeWerteTabelle(double sw)

welche eine Wertetabelle im Bereich x = -10 bis x = +10 erzeugt:

-10.0 / 98.0
 -9.5 / 88.25
 -9.0 / 79.0
	-8.5 / 70.25
…

Die Schrittweite soll über einen Parameter dieser Methode eingegeben werden können. In dem Beispiel hier wurde als Schrittweite 0.5 gewählt.

3 Punkte bekommen Sie, wenn Sie die Wertetabelle ähnlich darstellen wie in diesem Beispiel. Informieren Sie sich vorher über die formatierte Ausgabe von Zahlen!

Einen weiteren Punkt erhalten Sie, wenn Sie die Ausgabe flexibel gestalten, also nicht nur die Schrittweite als Parameter übergeben können, sondern auch die untere und obere Grenze des Definitionsbereichs (zum Beispiel von x = -25 bis x = +50).

Seitenanfang -