Home > Informatik > Informatik EF > Folge 4

Folge 4.5: 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 nicht festgelegt ist, wo oft die Schleife durchlaufen werden soll, setzt man for-Schleifen ein, wenn man bereits beim Schreiben des Programms weiß, wie häufig 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 initialisiert, eventuell sogar deklariert:

int i = 1

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

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

i <= 100

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

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

i++

In diesem Beispiel wird die Laufvariable i um den Wert 1 erhöht, aber erst dann, wenn der Schleifenkörper vollständig durchlaufen wurde.

Übung 4.4-1 (2 Punkte)

Schreiben Sie eine Methode

public int fakultaet(int n)

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

 

Interne Links:

Geschachtelte for-Schleifen

Syntax einer for-Schleife

Wie man dem Syntaxdiagramm einer for-Schleife gut entnehmen kann, besteht der Schleifenkörper aus einer Anweisungsliste. Bereits bei der if-else-Anweisung hatten wir über Anweisungslisten gesprochen. Eine Anweisungsliste ist

Eine Anweisung kann nun entweder eine einfache Anweisung wie z.B. eine Zuweisung oder ein Methodenaufruf sein, aber auch eine if-else-Anweisung, eine while-Schleife, eine do-while-Schleife oder eine weitere for-Schleife. Dies ermöglicht die Konstruktion verschachtelter Schleifen. In einer "äußeren" Schleife kann eine "innere" Schleife enthalten sein. Auch drei oder vier Schachtelungsebenen sind denkbar (wenn auch vielleicht nicht allzu sinnvoll). Aber all das kennen Sie ja bereits von while-Schleifen und if-else-Bedingungen her.

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

Das Objekt otto würde in der inneren for-Schleife eine bestimmte Zahl k von Schritten vorwärts gehen. Wie groß die Zahl der Schritte k jeweils ist, wird durch die äußere for-Schleife vorgegeben. Wenn otto nach vorn gegangen ist, dreht er sich nach links. Dann ist der Schleifenkörper der äußeren for-Schleife einmal durchlaufen, und k wird um den Wert 2 dekrementiert. Ist otto also eben noch 20 Schritte nach vorne gegangen, wird er beim nächsten Mal nur noch 18 Schritte nach vorne gehen und sich dann wieder nach links drehen.

Übungen

Übung 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();
}
Übung 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.

Übung 4.5-6

Schreiben Sie eine Klasse QFunktion (für quadratische Funktion), in deren Attributen 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!

Übung 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).

Weiter geht es mit Folge 5 - Java Applets

Geschachtelte for-Schleifen kommen sehr häufig in der Programmierung vor.