Si noti che questo approccio è più distorto e meno efficiente di un nextIntapproccio, 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 Maxe stai ottenendo un doppio valore. Per ottenere il Maxvalore 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))