Zurück zu: Java Tutorial
Wenn…dann…
Du weißt schon, dass Java die üblichen Vergleiche aus der Mathematik unterstützt:
- Kleiner als:
a < b
- Kleiner oder gleich:
a <= b
- Größer als:
a > b
- Größer oder gleich:
a >= b
- Gleich
a == b
- Ungleich:
a != b
In der Mathematik würde man dann sagen, dass eine Aussage wahr ist, wenn der Vergleich korrekt zutrifft. Also ist zum Beispiel der Vergleich 5 > 3
wahr, das heißt es trifft zu, ist also richtig. Der Vergleich 8 < 3
ist allerdings nicht wahr, trifft also nicht zu, ist nicht richtig.
Du kannst nun diese mathematischen Aussagen für Bedingungsprüfungen verwenden. Wenn die Bedingung zutrifft (wahr ist, richtig ist), dann soll etwas gemacht werden. Ansonsten wird etwas anderes gemacht. Damit kann man den Programmablauf in unterschiedliche Richtungen lenken.
In Java hast Du dafür verschiedene Schlüsselwörter zur Verfügung, mit denen Du Bedingungsprüfungen und die nachfolgenden Verzweigungen aufbauen kannst. Du siehst sie erstmal hier und wir zeigen Dir dann gleich, wie Du sie zusammenbauen kannst.
- Verwende
if
, um einen Codeblock anzugeben, der ausgeführt werden soll, wenn eine angegebene Bedingung erfüllt ist. - Verwende
else
, um einen Codeblock anzugeben, der ausgeführt werden soll, wenn dieselbe Bedingung nicht erfüllt ist. - Verwende
else if
, um eine neue zu testende Bedingung anzugeben, wenn die erste Bedingung nicht erfüllt ist. - Verwende
switch
, um mehrere alternative Codeblöcke anzugeben, die ausgeführt werden sollen. Das kommt später noch und ist an manchen Stellen im Programmcode einfach praktischer.
Die if-Anweisung
Du verwendest die if
Anweisung, um einen Java-Codeblock anzugeben, der ausgeführt werden soll, wenn eine Bedingung erfüllt
ist. Allgemein sieht das so aus.
Allgemeine Syntax
if ( Bedingung ) {
// Codeblock, der ausgeführt werden soll, wenn die Bedingung erfüllt ist
}
Beachte, dass if
in Kleinbuchstaben geschrieben wird. Großbuchstaben (If oder IF) führen zu einem Fehler. Dieser Programmcode funktioniert so noch nicht. Das ist erstmal nur das Schema für die Bedingungsprüfung.
Im folgenden Beispiel testen wir zwei Werte, um herauszufinden, ob eine Variable var1 größer als 18 ist. Wenn die Bedingung erfüllt
ist, geben wir einen Text aus. Je nachdem, wie die Variable var1
im vorherigen Programmcode belegt wurde, wird dann entweder die Ausgabe erzeugt oder nicht.
Beispiel Bedingungsprüfung mit if
if (var1 > 18) {
System.out.println("Die Variable var1 ist größer als 18");
}
Probier es aus im Online Compiler! Achtung, hier brauchst Du für funktionierenden Programmcode nicht nur die main()-Methode, sondern auch noch die Deklaration und Wertzuweisung zur Variable var1
.
Und natürlich können wir auch Variablen miteinander in einer Bedingungsprüfung vergleichen.
Beispiel Variablen in Bedingung
int x = 20;
int y = 18;
if (x > y) {
System.out.println("x ist größer als y");
}
Probier es aus im Online Compiler! Hier wurden die Variablen x und y vorher deklariert und initialisiert. Da brauchst Du nur noch die main()-Methode als Rahmen.
Beispiel erklärt
Im obigen Beispiel verwenden wir zwei Variablen, x und y, um zu testen, ob x größer als y ist (mit dem Operator >
). Auch hier ist wieder deutlich zu sehen, dass die Bedingung mit „wahr“ bewertet wird. Stell Dir aber vor, dass x und y vielleicht durch den Nutzer eingegeben werden. Oder vielleicht werden die Variablenwerte auch irgendwie über eine andere Formel berechnet. Dann ist das Ergebnis der Bedingungsprüfung nicht mehr so eindeutig abzulesen. Aber zu den Eingaben kommen wir später. Da x = 20 und y = 18 ist und da wir wissen, dass 20 größer als 18 ist, geben wir auf dem Bildschirm aus „x größer als y“. Klaro!
Hinweis
Hier siehst Du erstmal, dass nur zwei Werte verglichen werden. Als Bedingung können aber auch noch viel komplexere Ausdrücke eingesetzt werden. Das können zusammengesetzte Vergleiche oder auch Funktionsaufrufe mit bestimmten Ergebnisse sein. Damit kann man dann wirklich sehr interessante Verzweigungen aufbauen. Aber dazu kommen wir später. Hier kannst Du Dir erstmal merken, dass dieser eine Vergleich in der Klammer der if-Anweisung lange noch nicht alle Möglichkeiten ausschöpft.
Else – ansonsten etwas anderes machen
Bei der if-Anweisung hast Du gesehen, dass man auf eine Bedingung prüfen kann. Was aber passiert, wenn man im Programmcode noch die Alternative abhandeln möchte. Also bei Eintreten der Bedingung etwas zu machen ist wohl schon mal was. Aber wenn die Bedingung nicht eintritt, dann will man vielleicht extra noch etwas anderes machen. Das hieße dann also „ansonsten mache etwas anderes, und zwar …“. Dafür gibt es die else-Anweisung.
Allgemeine Syntax von else
if ( Bedingung ) {
// Codeblock, der ausgeführt werden soll, wenn die Bedingung erfüllt ist
} else {
// Codeblock, der ausgeführt werden soll, wenn die Bedingung nicht erfüllt ist
}
Wenn wir beim vorherigen Beispiel mit dem Vergleich von x und y bleiben, dann könnten wir so ergänzen:
int x = 12;
int y = 14;
if (x > y) {
System.out.println("x ist größer als y");
} else {
System.out.println("x ist kleiner oder gleich y");
}
Die Werte von x und y wurden hier mal geändert. Damit wird auch wirklich der else-Block ausgeführt. Denk dran, dass die Werte von x und y eigentlich irgendwo weit vorher im Programmcode festgelegt oder berechnet werden. Und hier wollen wir eben mal die Werte x und y prüfen und entsprechend verzweigen.
Wenn Du die Werte für x und y änderst, dann kannst Du auch testen, ob sich der Programmcode mit verschiedenen Werten von x und y richtig verhält.
Beispiel Flächenberechnung
Wir schauen uns mal ein etwas komplexeres Beispiel an. Du willst vielleicht die Fläche eines Rechtecks berechnen. Und Dein Programm soll gleichzeitig feststellen, ob das Rechteck ein Quadrat ist. Dann sind ja die Seiten gleich lang.
Wir stellen uns vor, dass zum Beispiel der Benutzer die Seitenlänge eingibt. Dann werden die Werte für die Variablen seite1 und seite2 irgendwie belegt. Eingabeanweisungen kennen wir noch nicht. Also weisen wir den Variablen einfach mal Werte zu, um die Bedingungsprüfung zu testen:
float seite1 = 10; // Stell Dir vor, dass es der Benutzer eingegeben hat
float seite2 = 8; // Stell Dir vor ... genau, der Benutzer war's
float flaeche; // eine Variable, die später den Flächeninhalt aufnehmen kann
if(seite1 != seite2) {
// Seiten sind nicht gleich lang, also ist es ein kein Quadrat
flaeche = seite1 * seite2;
} else {
// Ahhh, Seiten sind gleich lang -> Quadrat
flaeche = seite1 * seite1;
System.out.println("Es ist ein Quadrat!");
}
System.out.println("Flächeninhalt ist "+flaeche);
In der Bedingung steht der Operator != für den Vergleich. Es wird geprüft, ob seite1 ungleich seite2 ist. Das sieht auf den ersten Blick ungewöhnlich aus, ist einfach eine Möglichkeit für „ungleich“. Dann wird die Variable flaeche berechnet durch das Produkt von seite1 und seite2.
Falls die Seiten gleich sind, dann wird der else-Block ausgeführt. Wieder wird die Variable flaeche berechnet, diesmal aus dem Quadrat von seite1. Die seite2 ist ja genauso lang. Und dann wird noch ausgegeben, dass es ein Quadrat ist.
In beiden Fällen (Seiten gleich oder ungleich) wird dann nach der letzten schließenden, geschweiften Klammer } fortgefahren. Es wird also der berechnete Flächeninhalt ausgegeben.
Interessant ist hier noch, dass Du die Variable flaeche schon vor der Bedingungsprüfung anlegst. Dann steht sie auch für die Berechnung zur Verfügung und nach den Blöcken kann sei weiterhin verwendet werden.
Probier es aus im Online Compiler! Da brauchst Du nur noch die main()-Methode als Rahmen. Alles andere ist im Beispiel schon da.
Verkettung von if … else
Es ist zusätzlich auch möglich, mehrere if-else-Anweisungen miteinander zu verketten. Hier gleich mal das Beispiel von oben ein bisschen erweitert:
int x = 12;
int y = 14;
if (x > y) {
System.out.println("x ist größer als y");
} else if (x < y) {
System.out.println("x ist kleiner als y");
} else {
System.out.println("x ist gleich y");
}
Beim ersten else haben wir noch eine if-Anweisung hinzugefügt. Da kann man also falls die erste Bedingung nicht eintritt, nochmal auf eine andere Bedingung prüfen, hier dann eben, ob x < y ist. Und dann setzt Du den Programmcode nach dem gleichen Schema fort.
Hier im Beispiel wäre es jetzt sinnlos, noch eine weitere Bedingungsprüfung nach dem letzten else einzufügen. Aber theoretische wäre auch das möglich, solange bis es Dir selbst zu unübersichtlich wird. Dann verwende lieber die switch-case-Anweisung.
Probier es aus im Online Compiler! Und Du weißt mittlerweile schon gut, was zum vollständig lauffähigen Programm fehlt.