Notez que cette approche est plus biaisée et moins efficace qu'une nextInt
approche, https://stackoverflow.com/a/738651/360211
Un modèle standard pour y parvenir est le suivant :
Min + (int)(Math.random() * ((Max - Min) + 1))
Le site Java La fonction de la bibliothèque mathématique Math.random() génère une valeur double dans l'intervalle suivant [0,1)
. Notez que cette gamme n'inclut pas le 1.
Pour obtenir d'abord une gamme spécifique de valeurs, vous devez multiplier par la magnitude de la gamme de valeurs que vous voulez couvrir.
Math.random() * ( Max - Min )
Cela renvoie une valeur dans l'intervalle [0,Max-Min)
où "Max-Min" n'est pas inclus.
Par exemple, si vous voulez [5,10)
vous avez besoin de couvrir cinq valeurs entières, vous utilisez donc
Math.random() * 5
Cela renverrait une valeur dans l'intervalle [0,5)
où 5 n'est pas inclus.
Vous devez maintenant déplacer cette plage vers le haut, jusqu'à la plage que vous ciblez. Pour ce faire, vous ajoutez la valeur Min.
Min + (Math.random() * (Max - Min))
Vous obtiendrez maintenant une valeur dans l'intervalle [Min,Max)
. En suivant notre exemple, cela signifie [5,10)
:
5 + (Math.random() * (10 - 5))
Mais, cela n'inclut toujours pas Max
et vous obtenez une double valeur. Afin d'obtenir le Max
inclus, vous devez ajouter 1 à votre paramètre d'intervalle. (Max - Min)
et ensuite tronquer la partie décimale en la transformant en un int. Ceci est accompli via :
Min + (int)(Math.random() * ((Max - Min) + 1))
Et voilà, vous l'avez. Une valeur entière aléatoire dans l'intervalle [Min,Max]
ou selon l'exemple [5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))
0 votes
Lorsque vous avez besoin d'un grand nombre de nombres aléatoires, je ne recommande pas la classe Random de l'API. Elle a juste une période trop petite. Essayez la classe Torsion de Mersenne au lieu de cela. Il y a une implémentation Java .
20 votes
Avant de poster une nouvelle réponse, pensez qu'il y a déjà plus de 65 réponses à cette question. Veillez à ce que votre réponse apporte des informations qui ne figurent pas parmi les réponses existantes.
0 votes
randomNum = minimum + (int)(Math.random() * (maximum - minimum);