Beachten Sie, dass dieser Ansatz voreingenommener und weniger effizient ist als der nextInt
Ansatz https://stackoverflow.com/a/738651/360211
Ein Standardmuster, um dies zu erreichen, ist:
Min + (int)(Math.random() * ((Max - Min) + 1))
Die Java Math-Bibliotheksfunktion Math.random () generiert einen doppelten Wert im Bereich [0,1)
. Beachten Sie, dass dieser Bereich die 1 nicht enthält.
Um zuerst einen bestimmten Wertebereich zu erhalten, müssen Sie mit der Größe des Wertebereichs multiplizieren, den Sie abdecken möchten.
Math.random() * ( Max - Min )
Dies gibt einen Wert im Bereich zurück [0,Max-Min)
, in dem 'Max-Min' nicht enthalten ist.
Wenn Sie beispielsweise möchten [5,10)
, müssen Sie fünf ganzzahlige Werte abdecken, damit Sie sie verwenden können
Math.random() * 5
Dies würde einen Wert im Bereich zurückgeben [0,5)
, in dem 5 nicht enthalten ist.
Jetzt müssen Sie diesen Bereich auf den Bereich verschieben, auf den Sie abzielen. Sie tun dies, indem Sie den Min-Wert hinzufügen.
Min + (Math.random() * (Max - Min))
Sie erhalten nun einen Wert im Bereich [Min,Max)
. Nach unserem Beispiel bedeutet das [5,10)
:
5 + (Math.random() * (10 - 5))
Dies ist jedoch immer noch nicht enthalten Max
und Sie erhalten einen doppelten Wert. Um den Max
Wert aufzunehmen, müssen Sie Ihrem Bereichsparameter 1 hinzufügen (Max - Min)
und dann den Dezimalteil abschneiden, indem Sie ihn in ein int umwandeln. Dies erfolgt über:
Min + (int)(Math.random() * ((Max - Min) + 1))
Und da hast du es. Ein zufälliger ganzzahliger Wert im Bereich [Min,Max]
oder gemäß dem Beispiel [5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))