Verzweigungen (3)

Hier herrscht die Willkür


public class Zufall {
  public static void main(String[] args) {
    System.out.println("Willkommen am Würfeltisch\n");
    System.out.println("Klacker, klacker, der Würfel rollt\n");
    double zufall = Math.random();
    System.out.println("Der Zufallszahlengenerator lieferte "+zufall);
    int würfel = (int) (zufall*6+1);
    System.out.println("Der Würfel zeigt eine "+würfel+".\n");
  }
}


Da es schnell langweilig wird, wenn sich Computer völlig vorhersagbar verhalten, hat man in alle Programmiersprachen eine Zufallsfunktion implementiert (eingebaut, lauffähig gemacht). In Java dient dazu die Methode Math.random(). Sie benötigt keine Parameter und liefert double-Werte im Bereich 0 <= x <1. Diese muss man im Regelfall erst noch skalieren:

Aus dem Bereich 0 <= x < 1 wird durch Multiplikation mit 6 der Bereich 0 <= x < 6 und durch Addition von 1 der Bereich 1 <= x <7.

Wenn wir nun noch mit dem Typecast (int) die Nachkommastellen abschneiden sind die Ergebnisse des Java-Würfels von denen eines echten Würfels nicht mehr zu unterscheiden.

Was macht Ihr Zeugnis?

Manchmal stehen auch Lehrer im Verdacht ihre Noten zu würfeln. Hier ein Hilfsprogramm für Ihren Klassenlehrer:


import java.util.*;

public class Notenbesprechung {
  public static void main(String[] args) {
    Scanner Eingabe = new Scanner(System.in);
    String fach="", verbal="";
    int note;
    System.out.println("Notenbesprechung\n");
    System.out.print("Welche Note möchtest du wissen? ");
    fach = Eingabe.next();
    note = (int) (Math.random()*6 + 1);
    switch (note) {
      case 1 : verbal = "sehr gut";
        break;                                  // Der Einstiegspunkt in die Konstruktion
      case 2 : verbal = "gut";                  // wird über den Switch-Befehl festgelegt.
        break;                                  // Wenn die Note 3 ist, springt das Programm
      case 3 : verbal = "befriedigend";         // zum case 3 und arbeitet weiter bis zum
        break;                                  // Ausstiegspunkt break.
      case 4 : verbal = "ausreichend";
        break;
      case 5 : verbal = "mangelhaft";           // Wenn die gewürfelte Note nicht durch
        break;                                  // eine case-Anweisung erfasst wäre (z.B. note==9),
      case 6 : verbal = "ungenügend";           // würde das Programm beim default weitermachen.
        break;
      default: verbal="nicht feststellbar";
    }
    System.out.println("Deine Leistungen in "+fach+" sind "+verbal+".");
  }
}


Anstatt eine ganze Folge von if-Anweisungen zu schreiben, kann man das Kriterium in einer Variable speichern (hier die Note) und die dazugehörigen Anweisungen in einer Solchen switch-case-Kontrollstruktur unterbringen.  Hinter jedem case könnten auch mehrere   Anweisungen stehen, sie müssen jedoch stets vor dem nächsten case mit break abgeschlossen werden.

Aufgaben:

  1. Lassen Sie im Würfelprogramm versuchsweise die Klammer um (zufall*6+1) weg.
    Würfeln Sie mehrmals. Was passiert? Erklärung?
  2. Lassen Sie im Notenprogramm eine oder mehrere break-Anweisungen weg. Was passiert? Erklären Sie!
  3. Bauen Sie einen Roulettetisch nach. Lassen Sie die Kugel rollen und geben Sie das Ergebnis folgendermaßen aus:
    Es gewinnt 0: Alle Einsätze gehen an die Bank.
    Es gewinnt 12: gerade, rot, untere Hälfte, zweites Drittel, Dreierrest 0