Si noti che questo approccio è più distorto e meno efficiente di un nextInt
approccio, https://stackoverflow.com/a/738651/360211
Un modello standard per raggiungere questo obiettivo è:
Min + (int)(Math.random() * ((Max - Min) + 1))
La Java funzione di libreria Math Math.random () genera un doppio valore nell'intervallo [0,1)
. Si noti che questo intervallo non include l'1.
Per ottenere prima un intervallo di valori specifico, è necessario moltiplicare per l'entità dell'intervallo di valori che si desidera coprire.
Math.random() * ( Max - Min )
Ciò restituisce un valore nell'intervallo [0,Max-Min)
, dove "Max-Min" non è incluso.
Ad esempio, se si desidera [5,10)
, è necessario coprire cinque valori interi in modo da utilizzare
Math.random() * 5
Ciò restituirebbe un valore nell'intervallo [0,5)
, dove 5 non è incluso.
Ora devi spostare questo intervallo fino all'intervallo a cui ti rivolgi. Puoi farlo aggiungendo il valore Min.
Min + (Math.random() * (Max - Min))
Ora otterrai un valore nell'intervallo [Min,Max)
. Seguendo il nostro esempio, ciò significa [5,10)
:
5 + (Math.random() * (10 - 5))
Ma questo non include ancora Max
e stai ottenendo un doppio valore. Per ottenere il Max
valore incluso, è necessario aggiungere 1 al parametro range (Max - Min)
e quindi troncare la parte decimale eseguendo il casting in un int. Questo si ottiene tramite:
Min + (int)(Math.random() * ((Max - Min) + 1))
E il gioco è fatto. Un valore intero casuale nell'intervallo [Min,Max]
o per l'esempio [5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))