Verzweigungen (1)
Wo sind denn die Alternativen?
Nicht immer steht von vornherein fest, was ein Programm ausgeben wird.
Hier erfahren Sie, wie ein Programm flexibel auf die Eingabe der Benutzer
reagieren kann. Probieren Sie es aus.
import java.util.*;
public class WennDannSonst {
public static void main(String[] args) {
Scanner Eingabe = new Scanner(System.in);
System.out.println("Ich verkaufe meinen iPod classic\n");
// Das \n bewirkt eine Leerzeile
System.out.print("Wie viel Euro bietest du? ");
double gebot = Eingabe.nextDouble();
// Variablen können an beliebiger
if (gebot<20) {
// Stelle deklariert werden
System.out.println("Willst du mich beleidigen?");
} else {
System.out.println("Ok, das reicht mir!");
}
System.out.println();
}
}
Die Kontrollstruktur
if () then {} else {} gibt es in ähnlicher
Form in allen Programmiersprachen. Sie dient dazu, Anweisungen nur dann
auszuführen, wenn eine bestimmte Bedingung erfüllt ist bzw. zwischen zwei
Alternativen zu wählen.
Hinter dem einleitenden if steht zunächst in runden
Klammern eine Bedingung. Dann folgt - in geschweiften Klammern - der Anweisungsblock,
der ausgeführt werden soll, falls die Bedingung erfüllt ist. Schließlich
nach dem Befehl else der Anweisungsblock, der
ausgeführt werden soll, falls das nicht der Fall ist. Wenn der zweite Anweisungsblock
leer ist, kann der else-Teil entfallen.
Ein Tipp für deine eigenen Programme: Wenn Sie in der oberen rechten Symbolleiste des Java-Editors die "Kontrollstrukturen" auswählen, können Sie mit einem einzigen Klick die komplette if-then-else-Struktur mit allen Klammern eingeben.
Zahlenvergleiche
Eigentlich ganz einfach, oder? Leider lauern bei solchen
Vergleichen auch einige Tücken. Hier die erste:
Da das Zeichen = schon als Code für die Wertzuweisung reserviert ist, konnten
die Java-Programmierer es für den Test auf Gleichheit nicht mehr
einsetzen. Das hätte zu einem Syntaxwirrwarr geführt, der es dem
Compiler schwer macht, Programmfehler zu erkennen. Also verwendeten sie
(wie schon die C++-Autoren
vor ihnen) für den Vergleich das doppelte Gleichheitszeichen == .
import java.util.*;
class GeradeZahlen {
public static void main(String[] args) {
Scanner Eingabe = new Scanner(System.in);
System.out.println("Even or odd?\n");
System.out.print("Gib bitte eine ganze Zahl ein ");
int zahl = Eingabe.nextInt();
// Das Zeichen = bewirkt eine Wertzuweisung
if (zahl % 2 == 0) {
// Auf Gleichheit geprüft wird mit ==
System.out.println("Deine Zahl ist gerade\n");
} else {
System.out.println("Deine Zahl ist ungerade\n");
}
}
}
Hier ein Überblick über die möglichen Vergleiche zwischen
Zahlenwerten:
if (a==b) {} Wenn a gleich b, dann...
if (a!=b) {} Wenn a ungleich b, dann...
if (a>b) {} Wenn a größer als b, dann...
if (a>=b) {} Wenn a größer oder gleich b, dann...
if (a<b) {} Wenn a kleiner als b, dann...
if (a<=b) {} Wenn a kleiner oder gleich b, dann...
Stringvergleiche
Leider müssen Sie sich für Bedingungen noch eine weitere Eigenschaft von Java merken. Sie betrifft den Vergleich von Strings.
Während der Speicherplatz für so genannte "primitive"
Variablen wie int und double
direkt im Programmcode neben ihren Namen reserviert
wird, wird für Strings nur eine Referenz, d.h. Platz für eine Speicheradresse
angelegt. Wenn Sie also einen Vergleich so formulieren würden:
if (name == "Karl"), dann würde die Speicheradresse
der Variable name mit der Speicheradresse des
Strings "Karl" im Programmtext verglichen. Solche
Vergleich liefern leider normalerweise auch dann das Ergebnis "falsch",
wenn in der Stringvariablen name der Wert
"Karl" abgespeichert ist.
Zur Lösung des Problems
gibt es in der Klasse String die Methode equals(),
die auf jeden konkreten String angewendet werden kann.
import java.util.*;
class Anrede {
public static void main(String[] args) {
Scanner Eingabe = new Scanner(System.in);
System.out.println("Korrekte Anrede\n");
System.out.print("Bitte sag mir deinen Namen: ");
String name = Eingabe.next();
System.out.print("Junge (m) oder Mädchen (w)? ");
String geschlecht = Eingabe.next();
System.out.print("Hallo, ");
// Strings werden nicht mit ==,
if (geschlecht.equals("m")) {
// sondern mit der Methode
System.out.print("lieber ");
// StringA.equals(StringB)
} else {
// auf Gleichheit verglichen.
System.out.print("liebe ");
}
System.out.println(name+"!");
}
}
Aufgaben: