Java-Tutorial: Fallunterscheidungen (Bedingte Anweisungen)
Wie in anderen Programmiersprachen, so bietet natürlich auch Java die Möglichkeit der Fallunterscheidung zu nutzen, die auch in mancher Literatur als bedingte Anweisung beschrieben wird.
Ohne Fallunterscheidungen wäre ein Programm ziemlich doof, denn es könnte nicht flexibel Programmteile ausführen, die nur unter einer bestimmten Bedingung aufgerufen werden soll. Dazu bietet Java die if- bzw. if/else-Anweisungen und die switch-Anweisung.
Bedingte Anweisungen sind gar nicht so schwer – also fangen wir gleich mit der if-Anweisung an:
int meinAlter = 55; int rentenalter = 66; if(meinAlter != rentenalter) { System.out.println("Rentenalter nicht erreicht – weiterackern!"); }
Was macht dieses Programm nun? Wir setzen uns zwei Variablen mit den Werten 55 und 66. Die Variable meinAlter soll das jetzige Alter repräsentieren. Die Zweite enthält das gegenwärtige Rentenalter 66. Darunter sehen wir die if-Anweisung, die – wie jede if-Anweisung – mit dem Schlüsselwort if eingeleitet wird und in Klammern einen boolschen Wert enthält.
Hä, ich sehe aber gar keinen boolschen Wert?! Auf den ersten Blick erkennt man dies auch nicht sofort, doch der Operator != vergleicht zwei Werte auf Nicht-Gleichheit und liefert uns einen boolschen Wert als Ergebnis. Als Gegenstück dazu gibt es den == Operator, der zwei Werte auf Gleichheit hin überprüft. In unserem Fall würde es bedeuten, dass wir den Wert der Variablen meinAlter mit dem Wert der Variablen rentenalter vergleichen. Wir fragen uns also: “Ist der Wert der Variablen meinAlter ungleich des Wertes der Variablen rentenalter?”. Als Ergebnis bekommen wir von Java ein true – also es ist wahr, dass beide ungleich sind.
Da diese Bedingung nun wahr ist, wir der Code, der sich unterhalb der if-Anweisung in den geschweiften Klammern befindet ausgeführt.
In normaler Sprache ausgedrückt, könnte man diese Bedingung auch schreiben als: “Wenn meinAlter ungleich rentenalter ist, dann gib mir aus ‘Rentenalter nicht erreicht – weiterackern!’”.
Natürlich ist diese Bedingung nicht gut programmiert, denn wenn meinAlter einen Wert enthält, der größer als 66 ist, wir die Meldung ebenfalls ausgegeben. Stattdessen sollten wir den < Operator benutzen, der wie in der Mathematik prüft, ob der erste Wert kleiner dem zweiten Wert ist.
int meinAlter = 55; int rentenalter = 66; if(meinAlter < rentenalter) { System.out.println("Rentenalter nicht erreicht – weiterackern!"); }
So ist der Code schon viel besser. Was ist, wenn wir aber auch etwas ausführen möchten, wenn die if-Anweisung nicht zutrifft? Dafür gibt es eben die if-/else-Anweisung. Fügen wir nun unserem if- einen else-Zweig hinzu.
int meinAlter = 55; int rentenalter = 66; if(meinAlter < rentenalter) { System.out.println("Rentenalter nicht erreicht – weiterackern!"); } else { System.out.println("Yay, jetzt ist erstmal ausruhen angesagt!"); }
Ins else wird immer nur dann gesprungen, wenn das if nicht zutrifft. Bei uns würde eben die if-Anweisung zuschlagen, da unsere meinAlter-Variable kleiner ist als die rentenalter.
Ändern wir nun meinAlter zum Beispiel in 80, so würde die if-Anweisung nicht mehr zutreffen und dem Else-Zweig Beachtung geschenkt werden.
Es sind auch verschachtelte Fallunterscheidungen möglich:
int meinAlter = 1000; int rentenalter = 66; if(meinAlter < rentenalter) { System.out.println("Rentenalter nicht erreicht – weiterackern!"); } else { if(meinAlter >= 969) { System.out.println("Na, willst du Methusalem Konkurrenz machen?"); } else { System.out.println("Yay, jetzt ist erstmal ausruhen angesagt!"); } }
Wir haben meinAlter auf 1000 geändert. Da jetzt die Bedingung der if-Anweisung nicht zutrifft, wird in die else-Anweisung gesprungen. Darin befindet sich nun ebenfalls eine if-/else-Anweisung. Innerhalb des else-Zweiges, wird jetzt im if geprüft, ob meinAlter größer oder gleich 969 ist. Dies trifft nun zu und es wir die entsprechende Nachricht ausgegeben.
Für solch einen Fall bietet uns Java ein besonderes Konstrukt. Wir hätten also auch schreiben können:
int meinAlter = 1000; int rentenalter = 66; if(meinAlter < rentenalter) { System.out.println("Rentenalter nicht erreicht – weiterackern!"); } else if(meinAlter >= 969) { System.out.println("Na, willst du Methusalem Konkurrenz machen?"); } else { System.out.println("Yay, jetzt ist erstmal ausruhen angesagt!"); }
Die else-if-Anweisung ist eine Kombination der if – und else-Anweisung. Denn trifft nun der if-Fall bei uns nicht zu, dann wird der else-if-Fall überprüft. Trifft dieser auch nicht zu, wird else ausgeführt. Als Anmerkung sei noch gesagt, dass es uns möglich ist, so viele else-if-Fälle zu benutzen wie wir wollen.
Neben der if-Anweisung und der if-/else-Anweisung findet man die switch-Anweisung:
int meinAlter = 1000; switch(meinAlter) { case 0: System.out.println("Na, heute Windeln schon gewechselt bekommen?"); break; case 66: System.out.println("Du darfst in Rente gehen!"); break; case 969: System.out.println("Methusalem lässt grüßen"); break; case 4723: System.out.println("Der Methuselah-Baum ist so alt wie du – Respekt!"); break; default: System.out.println("Ja, schönes Alter!"); break; }
Der switch-Anweisung wird zunächst ein Wert übergeben. Dieser wir dann überprüft, ob er sich einem bestimmten Fall (case) zuordnen lassen kann. Ist dies nicht möglich, wird der default-Fall angewandt. Der default-Fall ist optional und kann auch weggelassen werden. Bei switch ist zu beachten, dass die break-Anweisungen gesetzt sind. Ein Break bedeutet, dass nach Aufruf der break-Anweisung der weitere Durchlauf einer Anweisung abgebrochen wird. Wird ein Break bei der switch-Anweisung vergessen, so erzeugen wir einen Fall-Through. Es wird jetzt nicht abgebrochen sobald ein Fall eingetroffen ist, sondern es werden die weiter unten stehenden Fälle auch überprüft.
Jetzt müssen wir nur noch etwas über Arrays erfahren und wir können unser CowSay-Programm zum “Sprechen” bringen.
Kommentare
Hi,
an dieser Stelle sei noch auf den ternären Operator hingewiesen:
Syntax:
booleanExpression ? trueExpression : falseExpression
Beispiel:
String text = (55 > 100) ? “summe < 100.” : “Summe < 100″;
System.out.println(text);
der ternäre Operator gehört bezeichnet man auch als konditionaler Operator
Das ist richtig – habe den auch unter dem Java-Tutorial Operatoren erwähnt, aber hier fällt der auch drunter