Skip to content

3.4 Zufallszahlen

Häufig werden bei der Programmierung zufällige Werte benötigt.

  • Ein Objekt soll an einer zufälligen Position auftauchen.
  • Die Farbe eines Objekts soll zufällig eingestellt werden.

Diese Zahlen lassen sich mit der Methode random() der Klasse Math erzeugen. Sie gibt einen double-Wert zurück, der größer gleich 0.0 und kleiner als 1.0 ist. Mit weiteren Rechenoperationen kann dieser Wertebereich erweitert bzw. verkleinert und verschoben werden.

Erweiterung/Verkleinerung des Wertebereichs

Durch eine Multiplikation mit einer Zahl größer 1 läßt sich der Wertebereich erweitern, eine Multiplikation mit einer Zahl zwischen 0 und 1 verkleinert den Wertebereich:
Math.random() * 4    erzeugt eine Zahl zwischen 0 und 4
Math.random() * 150.5    erzeugt eine Zahl zwischen 0 und 150.5
Math.random() * 0.5    erzeugt eine Zahl zwischen 0 und 0.5
Math.random() * 0.1    erzeugt eine Zahl zwischen 0 und 0.1

Verschiebung des Wertebereichs

Durch die Addition bzw. Subtraktion läßt sich der Wertebereich verschieben:
Math.random() + 6    erzeugt eine Zahl zwischen 6 und 7
Math.random() + 1.5    erzeugt eine Zahl zwischen 1.5 und 2.5
Math.random() - 0.5    erzeugt eine Zahl zwischen -0.5 und 0.5

Kombination von Verschiebung und Erweiterung/Verkleinerung

Die beiden Operationen lassen sich auch kombinieren:
Math.random() * 20 + 5 erzeugt eine Zahl zwischen 5 und 25
Math.random() * 0.2 + 0.5 erzeugt eine Zahl zwischen 0.5 und 0.7
Math.random() * 4 - 2 erzeugt eine Zahl zwischen -2 und 2
Zusammenfassend kann man sagen: Der Wert, mit dem multipliziert wird, gibt die Länge des Wertebereichs an. Der Wert, der addiert bzw. subtrahiert wird, gibt die linke Grenze des Wertebereichs an.

Ganzzahlige Zufallszahlen

In manchen Fällen möchte man keine zufällige Dezimalzahl (double), sondern einen ganzzahligen Wert (int) haben. Dann muss der Zufallswert zuletzt in einen int-Wert umgewandelt werden. Dies geschieht, indem man (int) vor die Berechnung des Zufallswertes schreibt. Die Berechnung selbst muss in Klammern geschrieben werden, damit die Umwandlung erst zum Ende der Berechnung erfolgt:
(int)(Math.random() * 50 - 10)    erzeugt eine ganzzahlige Zufallszahl zwischen -10 und 40.

Aufgaben

Aufgabe 1
Nenne die Anweisung, um eine Zufallszahl zwischen 0.0 und 7.0 zu erzeugen

Aufgabe 2
Erkläre, in welchem Wertebereich der Wert der Variablen zufallszahl liegt:
a) double zufallszahl = Math.random() * 50 + 10;
b) double zufallszahl = Math.random() * 150 - 50;

Aufgabe 3
Erkläre den Fehler, der sich bei der folgendne Codezeile ergibt:
int zahl = Math.random() * 50;
Fehler:   incompatible types: possible lossy conversion from double to int

Aufgabe 4
Es soll ein ganzzahliger Zufallswert zwischen 0 und 50 gefunden werden. Dafür wurde die folgende Anweisung geschrieben:
int zahl = (int)Math.random() * 50;

Beim mehrfachen Testen werden die folgenden Zahlen ausgegeben: 0; 0; 50; 50; 0; 50; 50; 50; 0; 0; 50; 0; 0; 0.
Erkläre, warum die obige Anweisung zu int zahl = (int)(Math.random() * 50); geändert werden muss, damit sie wie gewünscht funktioniert.