Respuestas:
Para generar un valor aleatorio entre rangeMin
y rangeMax
:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMin
y rangeMax
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):
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDouble
devolverá un valor doble pseudoaleatorio entre el mínimo (inclusivo) y el máximo (exclusivo). Los límites no son necesariamente int
, y pueden serlo double
.
Utilizar este:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
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.
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.
}
}
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)
double rangeMax= Double.MAX_VALUE;
ydouble rangeMin= -rangeMax;
siempre obtendrá un valor infinito a cambio. Es posible que desee verificarDouble.valueOf(rangeMax-rangeMin).isInfinite()
.