Letzte Änderung:
20.03.2012



Spruch des Tages

Ihr aber seht und sagt: Warum?
Aber ich träume und sage: Warum nicht?

George Bernard Shaw
Java




Bedingungen und Verzweigungen


In Programmen kommt es häufig vor, dass zwischen zwei oder mehr Möglichkeiten entschieden werden muss, wie der weitere Fortgang des Programms erfolgen soll. Die Folge ist, dass das Programm, wenn auch meist nur kurz, verzweigt. Grundlage für diese Entscheidungen sind Bedingungen, die der Programmierer über Vergleichsoperatoren und logische Operatoren festlegt. Das Ergebnis einer Bedingung kann nur einen von zwei möglichen Werten annehmen, entweder true oder false. Es sind keine weiteren Ergebniswerte möglich! Als Vergleichsoperatoren stehen Ihnen folgende Operatoren zur Verfügung:

Operator	Bedeutung

==              Überprüft zwei Ausdrücke auf Gleichheit. Sind die Ausdrücke gleich, ist das Ergebnis true

!=	        Überprüft zwei Ausdrücke auf Ungleichheit. Sind die Ausdrücke ungleich, ist das Ergebnis true.

>         	Wenn der linke Ausdruck größer ist als der rechte, ist das Ergebnis true.

<	        Wenn der linke Ausdruck kleiner ist als der rechte, ist das Ergebnis true.

>=	        Wenn der linke Ausdruck größer oder gleich dem rechten ist, ist das Ergebnis true.

<=	        Wenn der linke Ausdruck kleiner oder gleich dem rechten ist, ist das Ergebnis true.

Zur Verbindung und Auswertung von mehreren logischen Ausdrücken stehen Ihnen logische Operatoren zur Verfügung. Damit können Sie mehrere logische Ausdrücke zu einem Gesamten verbinden.

Operator	Bedeutung
&&	        Der UND-Operator liefert nur dann true, wenn alle verknüpften Ausdrücke true sind.

||	        Der ODER-Operator liefert dann true, wenn mindestens einer der verknüpften Ausdrücke true ist.

^	        Der Exclusiv-Operator liefert dann true, wenn genau einer der verknüpften Ausdrücke true ist.

!	        Die Negation wandelt das Ergebnis eines Ausdrucks in das Gegenteil. 
                Hat ein Ausdruck den Ergebniswert true, wird aus dem Ergebnis false, wenn 
                dem Ausdruck das Zeichen ! vorangestellt wird.



Um Bedingungen auszuwerten und letztendlich Entscheidungen treffen zu können, welcher Weg in der Folge eingeschlagen wird, dienen Kontrollstrukturen. Dabei wird zwischen Einfach- und Mehrfach- Verzweigungen unterschieden.

if – Verzweigung


Die if-Verzweigung ist eine Einfach-Verzweigung, die dazu dient, zu entscheiden, ob ein Codeblock ausgeführt wird oder nicht. if (i > 5)
{
… // Wenn i > 5 ist, dann wird dieser Codeblock ausgeführt.
}

Ergibt die Bedingung in den Klammern das Ergebnis true, wird der Codeblock ausgeführt. Ist das Ergebnis false, wird der Codeblock übersprungen und das Programm nach dem Codeblock weiter ausgeführt.

Im einfachsten Fall besteht der Codeblock nur aus einer Zeile und endet mit dem Semikolon.

if (i > 5) i++ ;

if – else – Verzweigung


Die if-else-Verzweigung ist eine Erweiterung der if-Verzweigung, die dazu dient, bei zwei vorhandenen Codeblöcken zu entscheiden, welcher der beiden Codeblöcke ausgeführt wird.

Als Sourcecode sieht das Programm wie folgt aus:
if (i > 5)
{
… // Wenn i > 5 ist, dann wird dieser Codeblock ausgeführt.
}
else
{
… // Wenn i <= 5 ist, dann wird dieser Codeblock ausgeführt.
}

Im einfachsten Fall bestehen die Codeblöcke nur aus einer Anweisung je Zweig:
if (i > 5)
i++;
else
i+=2;


Verschachtelungen von if- und if-else-Verzweigungen


Jede if-Verzweigung und if-else-Verzweigung stellt einen eigenständigen Codeblock dar. Dadurch ist auch möglich, mehrere if- oder if-else-Verzweigungen ineinander zu schachteln. Das nachfolgende Beispiel zeigt eine solche Verschachtelung.

if (i > 5) 
{	
        // Wenn i > 5 ist, dann wird dieser Codeblock ausgeführt.
	if (i > 10)
        {
            // Wenn i > 10 ist, dann wird dieser Codeblock ausgeführt.
        }
        else
        {
	    // Wenn i <= 10 ist, dann wird dieser Codeblock ausgeführt.
        }
        // Wenn i > 5 ist, dann wird dieser Codeblock ausgeführt.
} 
else
{
        // Wenn i <= 5 ist, dann wird dieser Codeblock ausgeführt.
        if (i > 3)
        {
            // Wenn i > 3 ist, dann wird dieser Codeblock ausgeführt.
        }
        else
        {
	    // Wenn i <= 3 ist, dann wird dieser Codeblock ausgeführt.
        }
        // Wenn i <= 5 ist, dann wird dieser Codeblock ausgeführt.
}


Es ist allerdings auch möglich, eine Verschachtelung noch ganz anders zu konstruieren:

if(i==5)
{
	// Wenn i = 5 ist, dann wird dieser Codeblock ausgeführt.
}
else if(i==6)
{
	// Wenn i == 6 ist, dann wird dieser Codeblock ausgeführt.
}
else if(i==7)
{
	// Wenn i == 7 ist, dann wird dieser Codeblock ausgeführt.
}
else 
{
	// Wenn i nicht 5, 6 oder 7 ist, dann wird dieser Codeblock 
	//ausgeführt. Dieser Codeblock gilt somit als default-Zweig, wenn 
	//keiner der vorher geprüften Werte zutrifft.
}


switch – case – Verzweigung


Die if- bzw. if-else-Verzweigung eignet sich für alle Fälle von Entscheidungen. Stehen jedoch mehrere Optionen zur Auswahl, wie z. B. bei Menüs, dann können die eventuell mehrfach ineinander geschachtelten Verzweigungen leicht zur Verwirrung führen. Um dies zu vermeiden, bieten viele Programmiersprachen Mehrfachverzweigungen als Kontrollstruktur an. In der Programmiersprache Java wird diese Mehrfachverzweigung switch-case-Verzweigung genannt.

Zu beachten ist, dass bei einer switch-case-Verzweigung keine booleschen Ausdrücke ausgewertet werden, sondern dass der Inhalt einer Variablen mit den Werten vor den einzelnen Blöcken (Wert1, Wert2, …) verglichen wird. Bei Übereinstimmung wird in diesen Block verzweigt. Am Ende eines Codeblocks muss zur Beendigung des Codeblocks der Befehl break stehen. Befindet sich am Ende eines Codeblocks kein break, wird der folgende Codeblock ebenfalls durchlaufen. Ist kein Wert vor den einzelnen Codeblocks zutreffend, wird in den optionalen Alternativ-Block (default-Zweig) verzweigt. Bei switch-case-Verzweigungen können nur ganze Zahlen (int, byte, …) oder einzelne Zeichen (char) verglichen werden.

Nun der Sourcecode:


switch (i)
{
	case 1: // Hier stehen die Anweisungen die ausgeführt werden sollen, 
	        // wenn i den Wert 1 hat
	        break;  // Das break beendet die Ausführung
	case 3: // Da in dem case 3 Zweig kein break vorhanden ist wird der folgende
 	        // case 4 Zweig auch durchlaufen.
	case 4: // Hier stehen die Anweisungen die ausgeführt werden sollen, 
	        // wenn eine 3 oder 4 eingegeben wurde
	default:// Hier stehen die Anweisungen die ausgeführt werden sollen, 
	        // wenn keine der vorgenannten Zahlen eingegeben wurde.
}