Verzweigungen (2)
Mehrere Möglichkeiten
Häufig kommt man auf mehreren Wegen zum Ziel. Bei der Einreise nach Island kann man sich durch Vorlage eines Personalausweises oder alternativ auch eines Reisepasses ausweisen. Hier der Dialog mit dem Grenzbeamten. Bitte ausprobieren:
import java.util.*;
class Grenze1 {
public static void main(String[] args) {
boolean pass, ausweis;
Scanner Eingabe = new Scanner(System.in);
System.out.println("Passkontolle (1)\n");
System.out.print("Haben Sie einen Pass dabei j/n ? ");
String antwort = Eingabe.next();
if (antwort.equals("j")) {pass = true;} else {pass = false;}
System.out.print("Haben Sie einen Ausweis dabei j/n ? ");
antwort = Eingabe.next();
if (antwort.equals("j")) {ausweis = true;} else {ausweis =
false;}
if (pass==true || ausweis==true) {
System.out.println("\nSie dürfen passieren");
} else {
System.out.println("\nSie müssen leider
umkehren!\n");
}
}
}
Gleich zu Beginn des Programms lernen Sie den neuen Variablentyp boolean kennen. In einer solchen Variable kann sich das Programm merken, ob eine Bedingung erfüllt war oder nicht. Eine boolean-Variable kann den Wert true oder false annehmen.
In der letzten If-Abfrage sehen Sie, wie die beiden Bedingungen miteinander verknüpft werden. Der Code || (auf der Tastatur AltGr <) steht für "oder". Die zusammengesetzte Bedingung ist erfüllt, wenn mindestens eine der beiden Einzelbedingungen wahr ist.
In unserem Falle geht es sogar noch einfacher:
Die Variablen pass und ausweis
sind an sich schon true oder
false, wir
müssen sie also nicht noch zusätzlich mit true vergleichen.
Statt if (pass==true || ausweis==true) {
können Sie einfach schreiben: if (pass || ausweis) {
Analog lässt sich die Wertzuweisung an booleschee Variablen
vereinfachen.
Statt if (antwort.equals("j")) {pass = true;} else
{pass = false;} schreiben Sie pass =
antwort.equals("j")
Negativ ist manchmal positiv
Manche Grenzer fragen auch nach ansteckenden Krankheiten. Und sie lassen einen natürlich dann passieren, wenn man nicht krank ist. In Java lässt sich der Wahrheitswert jeder Bedingung umkehren, indem man ein ! davor setzt. Entsprechendes gilt für boolesche Variablen. Wenn die Abfrage der Variablen krank true liefert, dann liefert die Abfrage !krank false.
import java.util.*;
class Grenze2 {
public static void main(String[] args) {
Scanner Eingabe = new Scanner(System.in);
System.out.println("Passkontolle (3)\n");
System.out.print("Haben Sie eine ansteckende Krankheit j/n ?
");
if (!Eingabe.next().equals("j")) {
System.out.println("\nSie dürfen passieren");
} else {
System.out.println("\nSie müssen leider
umkehren!\n");
}
}
}
Viele Bedingungen
An manchen Grenzen reicht der Personalausweis nicht aus. Um zu passieren, braucht man nicht nur einen Pass, sondern auch noch ein Visum. Im folgenden Beispiel werden die Bedingungen Pass und Visum (bzw. der Wert der entsprechenden Variablen) mit && verknüpft. Das liest man als "und". Die zusammengesetzte Bedingung ist nur dann erfüllt, wenn beide Einzelbedingungen erfüllt sind, sonst nicht. Probieren Sie es aus.
import java.util.*;
class Grenze3 {
public static void main(String[] args) {
boolean pass, visum;
Scanner Eingabe = new Scanner(System.in);
System.out.println("Passkontolle (2)\n");
System.out.print("Haben Sie den Pass dabei j/n ? ");
pass = Eingabe.next().equals("j");
System.out.print("Haben Sie auch ein Visum j/n ? ");
visum = Eingabe.next().equals("j");
if (pass && visum) {
System.out.println("\nSie dürfen passieren");
} else {
System.out.println("\nSie müssen leider
umkehren!\n");
}
}
}
Folgerungen
In der Praxis würde die zweite Frage nicht mehr gestellt, wenn die erste verneint wurde. Auch das lässt sich programmieren:import java.util.*;
class Grenze4 {
public static void main(String[] args) {
Scanner Eingabe = new Scanner(System.in);
System.out.println("Passkontolle (3)\n");
System.out.print("Haben Sie den Pass dabei j/n ? ");
if (Eingabe.next().equals("j")) {
System.out.print("Haben Sie auch ein Visum j/n ?
");
if (Eingabe.next().equals("j")) {
System.out.println("\nSie dürfen
passieren");
} else {
// else zum zweiten if
System.out.println("\nOhne Visum geht
hier nichts!\n");
}
} else {
// else zum ersten if
System.out.println("\nSie müssen leider
umkehren!\n");
}
}
}
Spätestens jetzt sehen Sie hoffentlich ein, wie nützlich es ist, jeden weiteren Anweisungsblock um zwei Stellen mehr einzurücken.
Aufgaben: