Java Kontrollstrukturen

Willemers Informatik-Ecke

Das einzig seriöse Javabuch :-) Mehr...


Errata

Bei Amazon bestellen


2014-02-02

Zurück zu Java

Abfragen, Bedingungen und Schleifen

Die Reihenfolge der Befehle kann durch Abfragen und Schleifen verändert werden, die auf Bedingungen reagieren.

Abfragen

Der Befehl if leitet eine Abfrage ein. In Klammern folgt eine Bedingung. Ist diese erfüllt, wird der nächste Befehl bzw. der nächste Block von Befehlen ausgeführt. Optional kann der Befehl else verwendet werden, um einen Befehl bzw. einen Block von Befehlen auszuführen, wenn die Bedingung nicht zutrifft.

Der Syntaxgraph für den if-Befehl sieht so aus:

if ( Bedingung ) Statement;
if ( Bedingung ) Statement1; else Statement2;

Ein typisches Beispiel ist die Abfrage vor einer Division, ob der Nenner eventuell 0 ist.

if (Nenner==0)
    System.out.println(“Nenner ist gleich 0”);
else
    Ergebnis = Zaehler / Nenner;
Statt einer einzelnen Anweisung kann auch ein Block von Anweisungen verwendet werden, indem die Anweisungen in geschweiften Klammern zusammengefasst werden.
if (Nenner==0) {
    System.out.println(“Nenner ist gleich 0”);
} else {
    Ergebnis = Zaehler / Nenner;
}

dangeling else

Wenn es bei zwei if-Anweisungen nur ein else gibt, gehört dieses immer zum inneren if. Beispiel:

if (b1)
    if (b2)
        a1;
else
    a2;

Der else-Zweig mit a2 gehört trotz der anders scheinenden Einrückung zum if mit b2.

Fallunterscheidung

Eine Sonderform der Abfrage ist die Fallunterscheidung. Hier wird bei abzählbaren Variablentypen der Inhalt einer Variablen mit verschiedenen Konstanten verglichen.

switch (ausdruck)
{
   case constant1:
       anweisung1;
   case constant2:
       anweisung2;
       break;
   case constant3:
       anweisung3;
       break;
   default:   
       anweisung4;
}

Der ausdruck muss vom Typ byte, short, char oder int sein. Ist der Wert von ausdruck gleich constant1, so wird die anweisung1 und die anweisung2 ausgeführt. Hinter anweisung2 sorgt das break dafür, dass die weiteren Anweisungen nicht ausgeführt werden.

Der default-Zweig wird angesprungen, wenn keine der Konstanten dem switch-Ausdruck entspricht. Der Syntaxgraph für die Fallunterscheidung sieht so aus:

Korrekterweise müsste der Syntaxgraph so umgebaut werden, dass nur ein default-Zweig möglich ist. Allerdings wird er dadurch auch etwas unübersichtlich.

Bedingungen

Für den Vergleich numerischer Werte gibt es die folgenden Operatoren:
Operator Bedeutung
a == b a gleich b?
a != b a ungleich b?
a > b a größer als b?
a >= b a größer oder gleich b?
a < b a kleiner als b?
a <= b a kleiner oder gleich b?

Darüber hinaus gibt es Verknüpfungen von booleschen Ausdrücken. Die Verknüpfung UND ist wahr, wenn alle Teilausdrücke wahr sind. Die Verknüpfung ODER ist wahr, wenn mindestens ein Teilausdruck war ist. Der NOT-Operator hat nur einen Operanden. Das Ergebnis ist wahr, wenn der Operand nicht wahr ist.

Verknüpfung Gesamtausdruck ist genau dann wahr, wenn...
(a == b) && (c == d) ...alle Teilausdrücke wahr sind
(a == b) || (c == d) ...mindestens ein Teilausdruck wahr ist
!a ...wenn a falsch ist.

Schleifen

Die Schleife wird durch das Schlüsselwort while eingeleitet. Es folgt die Bedingung, unter der das Programm in der Schleife bleibt. Solange (while) diese Bedingung gilt, verlässt das Programm die Schleife nicht. Der Schleifenkörper kann aus einer Anweisung oder aus einem Block von Anweisungen bestehen.

while ( Bedingung )
    Anweisung

Das folgende Beispiel errechnet, wie sich angelegtes Kapital entwickelt, wenn die Zinsen nicht ausgeschüttet werden, sondern beim Kapital bleiben. Dadurch ergeben sich Zinseszinsen.

public class Kapital {
   public static void main(String[] args) {
      double kapital = 0.00;
      int jahr = 0;
      while (jahr<10) {
      	kapital = kapital * 1.06 + 2400;
      	jahr = jahr + 1;
      	System.out.print(jahr);
      	System.out.print(" - ");
      	System.out.println(kapital);
      }
   }
}

Auch für die while-Schleife gibt es einen Syntaxgraph:

for

Die Schleife wird durch den Befehl for eingeleitet. Die for-Schleife ist eine spezialisierte while-Schleife. Sie wird überwiegend beim Zählen verwendet.

for  ( Startanweisung ; Bedingung ; EndAnweisung )
    SchleifenAnweisung

Ein Beispiel macht das sofort deutlich:

for (i=0; i<10; i++)
    a[i] = 1;

i=0 ist die Startanweisung. Sie wird genau einmal vor Beginn der Schleife ausgeführt. i<10 ist die Bedingung, die am Schleifenkopf abgefragt wird. Da 0 kleiner als 10 ist, wird die Anweisung a[0]=1 ausgeführt. Am Ende der Anweisung wird die Endanweisung i++ ausgeführt und wieder zum Kopf gesprungen. Die Startanweisung i=0 wird nicht wieder durchgeführt, da sie nur einmalig vor Start der Schleife ausgeführt wird. Aber die Bedingung wird wiederum geprüft.

Insgesamt setzt das Beispiel die Werte von a[0] bis a[9] und damit die ersten zehn Elemente des Feldes a auf 1.

public class Kapital {
   public static void main(String[] args) {
      double kapital = 0.00;
      for (int i=0; i<10; i++) {
      	kapital = kapital * 1.06 + 2400;
      	System.out.print(i+1);
      	System.out.print(" - ");
      	System.out.println(kapital);
      }
   }
}

Fußgesteuertes do-while

Im Gegensatz zur while-Schleife wird die do-Schleife mindestens einmal durchlaufen. Die Bedingung wird am Ende geprüft.

do
    Anweisung
while ( Bedingung )

Der Syntaxgraph sieht so aus

break und continue

Wie in C kann eine Schleife sowohl mit break als auch mit continue unterbrochen bzw. kurzgeschlossen werden. Mit break wird die Schleife verlassen. continue übergeht den Rest des Schleifenkörpers, bleibt aber in der Schleife, solange die Bedingung noch erfüllt ist.


Homepage - Java (C) Copyright 1999, 2000, 2001, 2011 Arnold Willemer