Math.random() vs Random

Status
Nicht offen für weitere Antworten.

Campino

Top Contributor
hi,
ich hab grade erst mit Math.random() Zufallszahlen von 1 bis 6 ermittelt und dann mitjava.util.Random. Dabei habe ich gezähl wie oft sich welches Ergebnis ergab. Bei Random sah das so aus (die Ergebnisse anderer Testläufe waren fast identisch, bei den Sechsern sogar genau):

Einer: 1037
Zweier: 934
Dreier: 1076
Vierer: 1006
Fünfer: 974
Sechser: 0

und jetzt die andere Variante:

Einer: 1000
Zweier: 1010
Dreier: 1021
Vierer: 935
Fünfer: 998
Sechser: 1036

Das ist doch seltsam, warum liefert Random keine Sechser? Ist Random nicht so gut für Zufallszahlen geeignet wie Math.random() oder habe ich einen Fehler beim ermitteln der Zufallszahlen (Code unten)

Code:
//Math.random()
zahl=(int) (1 + Math.floor(Math.random() * (6-1+1)));
//die andere Variante
zahl=new Random().nextInt(6);

Campino
 
Falls du einen "sichereren" Zufallszahlengenerator haben wilst, kannst dir ja mal SecureRandom angucken. Aber da du hier die Häufigkeit der 1-6 zählst, geh ich mal davon aus das das Problem nicht sicherheitskritisch ist 😉

Random verwendet afaik ja intern die Systemzeit zur Initiailisierung, müsstest mal in den Sources nachgucken wie Math das macht.
 
mic_checker hat gesagt.:
Random verwendet afaik ja intern die Systemzeit zur Initiailisierung, müsstest mal in den Sources nachgucken wie Math das macht.

Ja. bei Random wird -sofern kein anderes 'seed' angegeben- die Systemzeit verwendet. Bei Math.random() wird ein Random erstellt (sofern keines initialisiert ist) und die Methode nextDouble() aufgerufen.
Die beiden Funktionen sind somit nahezu gleichwertig... Random kann jedoch auch int's und long's zurückgeben.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben