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: