Nombres aléatoires avec les Mathématiques.random() en Java
Pour la génération de nombres aléatoires, j'ai utilisé la formule:
(int)(Math.random() * max) + min
La formule que j'ai trouver sur Google semblent toujours être:
(int)(Math.random() * (max - min) + min)
Un droit? Autant que je sache, je n'ai jamais eu un certain nombre qui était hors de ma gamme avec ma formule
Comme je suis sûr que d'une demi-douzaine de réponses en cherchant des points faciles va dire, le temps que je l'actualisation de la page: le vôtre est incorrect. Votre
vous semblez être un mec chanceux.
max
devrait vraiment être nommé range
ou width
.vous semblez être un mec chanceux.
OriginalL'auteur Alex | 2011-10-27
Vous devez vous connecter pour publier un commentaire.
Votre formule génère un nombre entre min et min + max.
Celui trouvés par Google génère un nombre entre min et max.
Google gagne!
min
et à l'exclusion demax
?OriginalL'auteur pjz
Une meilleure approche est:
Votre formule génère des nombres entre
min
etmin + max
.Résultat:
Voir en ligne ici: ideone
OriginalL'auteur Mark Byers
La vôtre: le plus Bas possible est de min, le plus élevé possible est max+min-1
Google: le plus Bas possible est de min, le plus élevé possible est max-1
C'est vrai. Donc -1.
OriginalL'auteur F.J
Le premier génère des nombres dans la mauvaise gamme, tandis que la seconde est correcte.
De montrer que la première est incorrecte, disons
min
est de 10 etmax
est de 20. En d'autres termes, le résultat devrait être supérieur ou égal à dix, et strictement inférieur à vingt. SiMath.random()
retourne0.75
, le résultat de la première formule est25
, qui est en dehors de la plage.OriginalL'auteur NPE
si
min=10
etmax=100
:donne un résultat entre 10 et 110, tandis que
donne un résultat compris entre 10 et 100, donc elles sont très différentes formules. Ce qui est important ici, c'est la clarté, alors quoi que vous fassiez, assurez-vous que le code précise de ce qui est généré.
(PS. le premier a plus de sens si vous modifiez la variable 'max' d'être appelé "gamme")
OriginalL'auteur Gordon Gustafson
cela vous donnera le nombre aléatoire entre 10 à 20.
la clé ici est:
départ num (10) et se terminant num est le nombre maximum (20) - (10) + 1 (11)
Profitez-en!
OriginalL'auteur Jason Chi
Google est bon 🙂
Google la formule de création de numéros entre: min et max
Votre formule de création de numéros entre: min et (min+max)
OriginalL'auteur manmathan
Maintenant, cela dépend de ce que vous voulez accomplir. Quand vous voulez avoir des Nombres de 1 à 100 par exemple, vous avez juste à ajouter
Donc 100 est la plage de valeurs. Lorsque vous souhaitez modifier le début de la plage de 20 à 120, vous devez ajouter +20 à la fin.
Ainsi, la formule est:
Et vous pouvez toujours calculer la distance avec max-min, c'est pourquoi Google vous donne cette formule.
OriginalL'auteur Sebastian Oberste-Vorth
Si
min = 5
, etmax = 10
, etMath.random()
revient (presque) 1.0, le nombre généré sera (presque) 15, ce qui est nettement plus que les choisimax
.Or, c'est la raison pour laquelle chaque nombre aléatoire API devrait vous permettre de spécifier les min et max explicitement. Vous ne devriez pas avoir à écrire le risque d'erreur de maths qui sont en rapport avec votre domaine de problème.
J'ai ajouté un "presque" par souci d'exactitude; j'ai choisi 1.0, car il est plus facile de comprendre un exemple avec des nombres entiers.
OriginalL'auteur millimoose
Math.random()
génère un nombre entre 0 (inclus) et 1 (exclus).Donc
(int)(Math.random() * max)
varie de0
àmax-1
inclusive.Puis
(int)(Math.random() * max) + min
varie demin
àmax + min - 1
, ce qui n'est pas ce que vous voulez.Google formule est correcte.
OriginalL'auteur Andrew Cooper
Il y a un petit problème avec la formule que vous avez trouvé dans Google.Il devrait être
(int)(Math.random() * (max - min + 1) + min)
pas(int)(Math.random() * (max - min) + min)
.OriginalL'auteur