J'ai deux doubles comme le suivant
double min = 100;
double max = 101;
et avec un générateur aléatoire, je dois créer une double valeur entre la plage de min et max.
Random r = new Random();
r.nextDouble();
mais il n'y a rien ici où nous pouvons spécifier la plage.
double rangeMax= Double.MAX_VALUE;
etdouble rangeMin= -rangeMax;
vous obtiendrez toujours une valeur infinie en retour. Vous voudrez peut-être vérifierDouble.valueOf(rangeMax-rangeMin).isInfinite()
.rangeMin
etrangeMax
est grande, il peut y avoir 10 000 000 valeurs doubles distinctes entre elles. Le résultat de(rangeMax - rangeMin) * r.nextDouble()
ne choisira qu'entre 10 000 de ces 10 000 000 valeurs possibles. (Je pense que ce n'est pas une explication parfaite, mais peut-être que cela aide un peu ...)Cette question a été posée avant la sortie de Java 7, mais maintenant, il existe un autre moyen possible d'utiliser l'API Java 7 (et supérieur):
nextDouble
renverra une valeur double pseudo-aléatoire entre le minimum (inclus) et le maximum (exclusif). Les limites ne sont pas nécessairementint
et peuvent l'êtredouble
.la source
Utilisez ceci:
ÉDITER:
new Random().nextDouble()
: génère aléatoirement un nombre entre 0 et 1.start
: numéro de départ, pour décaler le numéro "vers la droite"end - start
: intervalle. Random vous donne de 0% à 100% de ce nombre, car random vous donne un nombre de 0 à 1.EDIT 2: Tks @daniel et @aaa bbb. Ma première réponse était fausse.
la source
la source
la source
L'idée principale de l'aléatoire est qu'il renvoie une valeur pseudo-aléatoire. Il n'existe pas de fonctions entièrement aléatoires, par conséquent, 2 instances aléatoires utilisant la même valeur de départ renverront la même valeur dans certaines conditions.
Il est recommandé de consulter d'abord la documentation de la fonction afin de la comprendre ( https://docs.oracle.com/javase/8/docs/api/java/util/Random.html )
Maintenant que nous comprenons que la valeur retournée de la fonction nextDouble () est une valeur pseudo-aléatoire entre 0,0 et 1,0, nous pouvons l'utiliser à notre avantage.
Pour créer un nombre aléatoire entre A et B donnant que les limites sont valides (A> B), nous devons: 1. trouver la plage entre A et B afin que nous puissions savoir combien de "pas" nous avons. 2. utilisez la fonction aléatoire pour déterminer le nombre d'étapes à effectuer (comme la valeur renvoyée est comprise entre 0,0 et 1,0, vous pouvez la considérer comme "choisir un pourcentage d'augmentation aléatoire" 3. ajouter le décalage
Après tout cela, vous pouvez voir que la foule vous a donné le moyen le plus simple et le plus courant de le faire à mon avis
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble ();
double RandomValue = Offset + (Range) * (randomVal entre 0.0-1.0)
la source