Advanced Java Services | Random |
Für die Klasse Random benötigt man das Import java.util.*;
Randomobjekte sind Zufallsgeneratoren, die nach einem mathematischen Algorithmus Zahlen liefern,
deren Aufeinanderfolge einen zufälligen Ablauf simuliert. Randomobjekte können "zufällige" int, long,
float, und double produzieren, des weiteren double-Zahlen, die eine Gauss'sche Normalverteilung
simulieren.
Man kann sich das etwa so vorstellen, daß Randomobjekte eine lange Folge von Zahlen halten,
deren Aufeinanderfolge zufällig erscheint. Welche Zahl als erste in dieser Reihe von einer Methode
geliefert wird, bestimmt man über den Konstruktor. Der Konstruktor setzt quasi eine Art Zeiger
auf die Zahl, die beim ersten Aufruf von nextXxx() geliefert wird. Der Defaultkonstruktor setzt diesen
Zeiger in Abhängigkeit von der Systemzeit, sodaß man nicht weiß, wo der Anfangspunkt liegt.
Der Konstruktor mit einem Parameter setzt den Zeiger abhängig vom Parameter immer auf die gleiche Stelle,
so daß man auf diese Weise immer die selbe Zahlenfolge erhält. Das ist zum Austesten von Programmen,
die einen zufälligen Ablauf simulieren, äußerst wichtig.
Wichtige Konstruktoren | |
---|---|
Random() |
Creates a new random number generator. |
Random(long seed) |
Creates a new random number generator using a single long seed. |
Wichtige Methoden | |
---|---|
Returntyp | Name der Methode |
double |
nextDouble() Returns the next pseudorandom, uniformly distributed double value between 0.0 (inclusive) and 1.0 (exclusive) from this random number generator's sequence. (Analog produziert nextFloat() float-Zahlen zwischen 0.0 und 1.0) |
double |
nextGaussian() Returns the next pseudorandom, Gaussian ("normally") distributed double value with mean 0.0 and standard deviation 1.0 from this random number generator's sequence. |
int |
nextInt() Returns the next pseudorandom, uniformly distributed int value from this random number generator's sequence. All 232 possible int values are produced with (approximately) equal probability. (Analog produziert nextLong() long-Zahlen im gesamten Wertebereich von long) |
int |
nextInt(int n) Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence. |
void |
setSeed(long seed) Sets the seed of this random number generator using a single long seed. |
Das folgende Beispiel erzeugt vier Mal sechs Lottozahlen, die letzten beiden Serien sind identisch, weil man den gleichen Kontruktoraufruf verwendet.
import java.util.*; public class RandomDemo { public static void main(String args[]) { int lottoZahl[] = new int[6] ; Random rd = new Random(); // Zufallsgenerator erzeugen for(int i=0; i<lottoZahl.length; i++) { lottoZahl[i] = rd.nextInt(49) + 1 ; System.out.print(lottoZahl[i]+"\t"); } System.out.println("\n--------------------"); try{ Thread.sleep(1000); } catch(Exception ex) {} // jetzt hat sich die Systemzeit um eine Sekunde geändert rd = new Random(); // neuer Zufallsgenerator for(int i=0; i<lottoZahl.length; i++) { lottoZahl[i] = rd.nextInt(49) + 1 ; System.out.print(lottoZahl[i]+"\t"); } System.out.println("\n--------------------"); rd = new Random(2); // neuer Zufallsgenerator mit Startindex 2 for(int i=0; i<lottoZahl.length; i++) { lottoZahl[i] = rd.nextInt(49) + 1 ; System.out.print(lottoZahl[i]+"\t"); } System.out.println("\n--------------------"); rd = new Random(2); // neuer Zufallsgenerator mit gleichem Startindex for(int i=0; i<lottoZahl.length; i++) { lottoZahl[i] = rd.nextInt(49) + 1 ; System.out.print(lottoZahl[i]+"\t"); } System.out.println("\n--------------------"); } }
Die Ausgabe der der ersten beiden Tips ist nicht vorhersehbar, die letzten beiden Serien sollten aber auf ihrem Rechner auch erscheinen.
15, 10, 29, 13, 27, 22 20, 7, 32, 41, 1, 11 48, 2, 12, 12, 34, 16 48, 2, 12, 12, 34, 16
Hier sieht man schon, daß für die Simulation eines Lottospiels mehr zu tun ist, als nur nextInt() aufzurufen.