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:

  1. Fragen Sie den Benutzer nach seinem Alter und entscheiden Sie, ob Sie ihm eine Flasche Bier verkaufen dürfen.
  2. Fragen Sie den Benutzer, ob das Wetter gut oder schlecht ist und machen Sie je nach Antwort einen passenden Vorschlag.
  3. Lassen Sie vom Benutzer zwei Zahlen eingeben und geben auf dem Bildschirm die größere der beiden Zahlen aus.
  4. Alle quadratischen Gleichungen lassen sich auf die Normalform x² + px + q = 0 bringen.
    Erfragen Sie p und q vom Benutzer.
    Wenn (p/2)²-q <0 ist, dann geben Sie aus "Die Lösungsmenge ist leer"
    Andernfalls geben Sie die beiden Lösungen aus:
    Erste Lösung: -p/2 + Wurzel((p/2)²-q),
    Zweite Lösung: -p/2 - Wurzel((p/2)²-q)