Números aleatorios de Java usando una semilla
Este es mi código para generar números aleatorios usando una semilla como argumento:
double randomGenerator(long seed) {
Random generator = new Random(seed);
double num = generator.nextDouble() * (0.5);
return num;
}
Cada vez que doy una semilla e intento generar 100 números, todos son iguales.
¿Cómo puedo arreglar esto?
Si estás dando la misma semilla, eso es normal. Esa es una característica importante que permite realizar pruebas.
Marque esto para comprender la generación pseudoaleatoria y las semillas:
Generador de números pseudoaleatorios
Un generador de números pseudoaleatorios (PRNG), también conocido como generador determinista de bits aleatorios DRBG, es un algoritmo para generar una secuencia de números que se aproxima a las propiedades de los números aleatorios. La secuencia no es verdaderamente aleatoria en el sentido de que está completamente determinada por un conjunto relativamente pequeño de valores iniciales, llamado estado del PRNG, que incluye una semilla verdaderamente aleatoria.
Si desea tener secuencias diferentes (el caso habitual cuando no se ajusta o depura el algoritmo), debe llamar al constructor de argumento cero que utiliza nanoTime para intentar obtener una semilla diferente cada vez. Por supuesto, esta Random
instancia debe mantenerse fuera de su método.
Su código probablemente debería ser así:
private Random generator = new Random();
double randomGenerator() {
return generator.nextDouble()*0.5;
}
La forma más sencilla es utilizar:
Random rand = new Random(System.currentTimeMillis());
Esta es la mejor manera de generar Random
números.