Réponses:
Pour générer une valeur aléatoire entre rangeMin
et rangeMax
:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMin
et rangeMax
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):
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDouble
renverra une valeur double pseudo-aléatoire entre le minimum (inclus) et le maximum (exclusif). Les limites ne sont pas nécessairement int
et peuvent l'être double
.
Utilisez ceci:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
É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.
import java.util.Random;
public class MyClass {
public static void main(String args[]) {
Double min = 0.0; // Set To Your Desired Min Value
Double max = 10.0; // Set To Your Desired Max Value
double x = (Math.random() * ((max - min) + 1)) + min; // This Will Create A Random Number Inbetween Your Min And Max.
double xrounded = Math.round(x * 100.0) / 100.0; // Creates Answer To The Nearest 100 th, You Can Modify This To Change How It Rounds.
System.out.println(xrounded); // This Will Now Print Out The Rounded, Random Number.
}
}
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)
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()
.