Es ist zu beachten, dass dieser Ansatz stärker verzerrt und weniger effizient ist als ein nextInt
Ansatz, https://stackoverflow.com/a/738651/360211
Ein Standardmuster für diese Aufgabe ist:
Min + (int)(Math.random() * ((Max - Min) + 1))
El Java Die mathematische Bibliotheksfunktion Math.random() erzeugt einen Doppelwert im Bereich [0,1)
. Beachten Sie, dass dieser Bereich nicht die 1.
Um einen bestimmten Wertebereich zu erhalten, müssen Sie zunächst mit der Größe des Wertebereichs multiplizieren, den Sie abdecken möchten.
Math.random() * ( Max - Min )
Dies gibt einen Wert im Bereich [0,Max-Min)
, wobei 'Max-Min' nicht enthalten ist.
Zum Beispiel, wenn Sie [5,10)
müssen Sie fünf ganzzahlige Werte abdecken, also verwenden Sie
Math.random() * 5
Dies würde einen Wert im Bereich von [0,5)
, wobei 5 nicht enthalten ist.
Nun müssen Sie diesen Bereich nach oben in den Bereich verschieben, den Sie anvisieren. Dazu fügen Sie den Wert Min hinzu.
Min + (Math.random() * (Max - Min))
Sie erhalten nun einen Wert im Bereich von [Min,Max)
. In unserem Beispiel bedeutet das [5,10)
:
5 + (Math.random() * (10 - 5))
Dies beinhaltet jedoch noch nicht Max
und Sie erhalten einen doppelten Wert. Um den Max
Wert enthalten, müssen Sie 1 zu Ihrem Bereichsparameter hinzufügen (Max - Min)
und schneidet dann den Dezimalteil ab, indem er in eine int. Dies wird erreicht durch:
Min + (int)(Math.random() * ((Max - Min) + 1))
Und da haben Sie es. Ein zufälliger ganzzahliger Wert im Bereich [Min,Max]
oder wie in diesem Beispiel [5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))
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 .
46 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.