Ich werde einfach angeben, was an den Lösungen der Frage falsch ist und warum die Fehler.
Lösung 1:
randomNum = minimum + (int)(Math.random()*maximum);
Problem: randomNum werden Werte zugewiesen, die größer als das Maximum sind.
Erläuterung: Angenommen, unser Minimum ist 5 und Ihr Maximum ist 10. Jeder Wert von Math.random()
größer als 0,6 führt dazu, dass der Ausdruck 6 oder mehr ergibt, und durch Hinzufügen von 5 wird er größer als 10 (Ihr Maximum). Das Problem ist, dass Sie die Zufallszahl mit dem Maximum multiplizieren (was eine Zahl ergibt, die fast so groß ist wie das Maximum) und dann das Minimum addieren. Wenn das Minimum nicht 1 ist, ist es nicht korrekt. Sie müssen, wie in anderen Antworten erwähnt, umschalten auf
randomNum = minimum + (int)(Math.random()*(maximum-minimum+1))
Das +1 liegt daran, dass Math.random()
wird niemals 1,0 zurückgeben.
Lösung 2:
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum = minimum + i;
Ihr Problem ist, dass '%' eine negative Zahl zurückgeben kann, wenn der erste Term kleiner als 0 ist. rn.nextInt()
mit einer Wahrscheinlichkeit von ~50 % negative Werte liefert, werden Sie auch nicht das erwartete Ergebnis erhalten.
Diese war jedoch nahezu perfekt. Man musste nur ein bisschen weiter unten in der Javadoc nachsehen, nextInt(int n) . Mit dieser Methode ist es möglich, die
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt(n);
randomNum = minimum + i;
würde ebenfalls das gewünschte Ergebnis liefern.
0 Stimmen
Wenn Sie viele Zufallszahlen benötigen, empfehle ich die Klasse Random in der API nicht. Sie hat einfach eine zu kleine Periode. Versuchen Sie die Mersenne-Twister stattdessen. Es gibt eine Java-Implementierung .
47 Stimmen
Bevor Sie eine neue Antwort schreiben, bedenken Sie, dass es bereits mehr als 65 Antworten auf diese Frage gibt. Bitte stellen Sie sicher, dass Ihre Antwort Informationen enthält, die nicht in den vorhandenen Antworten enthalten sind.