Tengo dos dobles como el siguiente
double min = 100;
double max = 101;
y con un generador aleatorio, necesito crear un valor doble entre el rango de min y max.
Random r = new Random();
r.nextDouble();
pero no hay nada aquí donde podamos especificar el rango.
double rangeMax= Double.MAX_VALUE;
ydouble rangeMin= -rangeMax;
siempre obtendrá un valor infinito a cambio. Es posible que desee verificarDouble.valueOf(rangeMax-rangeMin).isInfinite()
.rangeMin
yrangeMax
es grande, entonces podría haber 10,000,000 valores dobles distintos entre ellos. El resultado de(rangeMax - rangeMin) * r.nextDouble()
solo elegirá entre 10,000 de esos posibles 10,000,000 de valores. (Siento que esta no es una explicación perfecta, pero tal vez ayude un poco ...)Esta pregunta se hizo antes del lanzamiento de Java 7, pero ahora, hay otra forma posible de usar la API de Java 7 (y superior):
nextDouble
devolverá un valor doble pseudoaleatorio entre el mínimo (inclusivo) y el máximo (exclusivo). Los límites no son necesariamenteint
, y pueden serlodouble
.fuente
Utilizar este:
EDITAR:
new Random().nextDouble()
: genera aleatoriamente un número entre 0 y 1.start
: número de inicio, para cambiar el número "a la derecha"end - start
: intervalo. Aleatorio le da de 0% a 100% de este número, porque aleatorio le da un número de 0 a 1.EDITAR 2: Tks @daniel y @aaa bbb. Mi primera respuesta fue incorrecta.
fuente
fuente
fuente
La idea principal de random es que devuelve un valor pseudoaleatorio. No existen funciones totalmente aleatorias, por lo tanto, 2 instancias aleatorias que usen la misma semilla devolverán el mismo valor en ciertas condiciones.
Es una buena práctica ver primero el documento de función para comprenderlo ( https://docs.oracle.com/javase/8/docs/api/java/util/Random.html )
Ahora que entendemos que el valor devuelto de la función nextDouble () es un valor pseudoaleatorio entre 0.0 y 1.0, podemos usarlo para nuestro beneficio.
Para crear un número aleatorio entre A y B dando que los límites son válidos (A> B) necesitamos: 1. encontrar el rango entre A y B para que podamos saber cuántos "pasos" tenemos. 2. use la función aleatoria para determinar cuántos pasos tomar (debido a que el valor devuelto está entre 0.0 y 1.0 puede considerarlo como "elegir un porcentaje aleatorio de aumento" 3. agregar el desplazamiento
Después de todo eso, puedes ver que la mafia te dio la forma más fácil y común de hacerlo, en mi opinión.
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble ();
double RandomValue = Offset + (Range) * (randomVal entre 0.0-1.0)
fuente