2010-09-09 15 views
89

tengo dos dobles como la siguienteGenerar un doble al azar en un intervalo de

double min = 100; 
double max = 101; 

y con un generador aleatorio, necesito para crear un valor doble entre el rango de min y max.

Random r = new Random(); 
r.nextDouble(); 

pero no hay nada aquí donde podemos especificar el rango.

Respuesta

172

para generar un valor aleatorio entre rangeMin y rangeMax:

Random r = new Random(); 
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble(); 
+16

Esto es generalmente correcto, pero tenga cuidado con sus límites. Si haces 'double rangeMax = Double.MAX_VALUE;' y 'double rangeMin = -rangeMax;' siempre obtendrás un valor infinito a cambio. Es posible que desee comprobar 'Double.valueOf (rangeMax-rangeMin) .isInfinite()'. – lre

28

Utilice esta:

double start = 400; 
double end = 402; 
double random = new Random().nextDouble(); 
double result = start + (random * (end - start)); 
System.out.println(result); 

EDIT:

new Random().nextDouble(): al azar genera ser un número Tween 0 y 1.

start: el número de inicio, para cambiar el número "a la derecha"

end - start: intervalo. Al azar le da de 0% a 100% de este número, ya que le da al azar un número entre 0 y 1.


EDIT 2: Tks @ Daniel y @aaa BBB. Mi primera respuesta fue incorrecta.

83

Esta pregunta se hizo antes de la liberación de Java 7, pero ahora, no hay otra forma posible el uso de Java 7 (y por encima) de la API:

double random = ThreadLocalRandom.current().nextDouble(min, max); 

nextDouble devolverá un valor doble pseudoaleatorio entre el mínimo (ambos inclusive) y el máximo (exclusivo). Los límites no son necesariamente int, y pueden ser double.

+2

llamada requiere api 21 – Nepster

Cuestiones relacionadas