Kapitel 2
Bedingungen
Bisher lief jedes Programm stur von oben nach unten. Mit Bedingungen trifft es Entscheidungen: Je nach Eingabe wird der eine oder der andere Teil ausgeführt.
if, else if, else
Hinter if steht in runden Klammern eine Bedingung. Ist sie wahr, läuft der Block in den geschweiften Klammern. Sonst geht es mit else if (nächste Bedingung) oder else (alle übrigen Fälle) weiter. Java prüft von oben nach unten und nimmt nur den ersten passenden Zweig.
Zum Vergleichen gibt es == (gleich), != (ungleich), <, <=, > und >=.
Probier die Eingaben -5, 0 und 15 aus. Bei 15 ist temperature < 15 falsch, deshalb landet das Programm im else.
Wahrheitswerte und Verknüpfungen
Eine Bedingung ist ein Wert vom Typ boolean: true oder false. Du kannst ihn in einer Variablen speichern und verknüpfen:
a && b: beides muss wahr sein (und)a || b: mindestens eines muss wahr sein (oder)!a: dreht den Wert um (nicht)
&& bindet stärker als ||. Setz im Zweifel Klammern, dann ist es auch beim Lesen klar.
Texte vergleichst du mit equals, nicht mit ==: command.equals("stop").
switch
Prüfst du eine Variable gegen mehrere feste Werte, ist switch übersichtlicher als eine lange else if-Kette. Jeder Fall steht hinter case, nach dem Pfeil -> kommt, was passieren soll. Mehrere Werte trennst du mit Komma. default deckt alle übrigen Werte ab. switch funktioniert mit ganzen Zahlen und mit Texten.
Ein switch kann auch einen Wert liefern (Switch-Ausdruck). Dann steht er rechts vom = oder hinter return, endet mit einem Semikolon und braucht für jeden möglichen Wert einen Fall, meist über default.
Typische Fehler
= statt ==
=weist einen Wert zu,==vergleicht.if (age = 18)meldet der Compiler mitincompatible types: int cannot be converted to boolean.Texte mit == vergleichen
==prüft bei Texten, ob es dasselbe Objekt ist, nicht ob die Buchstaben gleich sind. Mit eingelesenen Texten ist das oftfalse, obwohl sie gleich aussehen. Immerequalsbenutzen:if (answer.equals("yes")) { ... }Semikolon hinter if
if (x > 10);ist eine Bedingung mit leerer Anweisung. Der Block danach läuft dann immer. Hinter die runde Klammer gehört direkt die geschweifte.Falsche Reihenfolge
Bei
else ifgewinnt der erste passende Zweig. Stehtif (points >= 50)vorelse if (points >= 90), wird der zweite Zweig nie erreicht. Prüfe die engere Bedingung zuerst.default fehlt im Switch-Ausdruck
Liefert ein
switcheinen Wert, muss jeder mögliche Wert abgedeckt sein. Ohnedefaultmeldet der Compilerthe switch expression does not cover all possible input values.