La clase Java Random se utiliza para generar una serie de números aleatorios.
Clase Random de Java
- La clase
Random
es parte del paquete java.util. - Se utiliza una instancia de la clase Random de Java para generar números aleatorios.
- Esta clase proporciona varios métodos para generar números aleatorios de tipo entero, doble, largo, flotante, etc.
- El algoritmo de generación de números aleatorios funciona en base al valor de semilla. Si no se proporciona, se crea un valor de semilla a partir del tiempo nano del sistema.
- Si dos instancias de Random tienen el mismo valor de semilla, generarán la misma secuencia de números aleatorios.
- La clase Random de Java es segura para subprocesos, sin embargo, en un entorno multihilo se recomienda utilizar la clase
java.util.concurrent.ThreadLocalRandom
. - Las instancias de la clase Random no son adecuadas para aplicaciones sensibles a la seguridad; es mejor utilizar
java.security.SecureRandom
en esos casos.
Constructores de Java Random
La clase Random de Java tiene dos constructores que se muestran a continuación:
Random()
: crea un nuevo generador aleatorioRandom(long seed)
: crea un nuevo generador aleatorio utilizando la semilla especificada.
Métodos de la Clase Java Random
Vamos a ver algunos de los métodos de la clase Random de Java.
nextBoolean()
: Este método devuelve el siguiente seudorandom, que es un valor booleano, de la secuencia del generador de números aleatorios.nextDouble()
: Este método devuelve el siguiente seudorandom, que es un valor double entre 0.0 y 1.0.nextFloat()
: Este método devuelve el siguiente seudorandom, que es un valor float entre 0.0 y 1.0.nextInt()
: Este método devuelve el siguiente valor int de la secuencia del generador de números aleatorios.- nextInt(int n): Este método devuelve un seudorandom, que es un valor int entre 0 y el valor especificado, de la secuencia del generador de números aleatorios.
Ejemplo de Random en Java
Vamos a ver el siguiente programa de ejemplo de Random en Java.
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Example Program
*
*/
public class RandomNumberExample {
public static void main(String[] args) {
// inicializa el generador de números aleatorios
Random random = new Random();
// genera un valor booleano
System.out.println(random.nextBoolean());
// genera un valor double
System.out.println(random.nextDouble());
// genera un valor float
System.out.println(random.nextFloat());
// genera un valor int
System.out.println(random.nextInt());
// genera un valor int within specific limit
System.out.println(random.nextInt(20));
}
}
El resultado del programa anterior es:
false
0.30986869120562854
0.6210066
-1348425743
18
Consulte esta publicación para obtener más información sobre Generación de números aleatorios en Java.
Generar número aleatorio usando semilla
Hay dos formas de generar un número aleatorio usando una semilla.
Random random = new Random(long seed);
Random random1 = new Random();
random1.setSeed(seed);
La semilla es el valor inicial del estado interno del generador de números pseudoaleatorios que se mantiene mediante el método next(int).
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Using Seed Example Program
*
* @author pankaj
*
*/
public class RadomSeedExample {
public static void main(String[] args) {
//usando el constructor
Random random = new Random(100);
System.out.println("Using Constructor");
System.out.println(random.nextInt());
//usando el método
Random random2 = new Random();
random2.setSeed(200);
System.out.println("Using Method");
System.out.println(random2.nextInt());
}
}
La salida del programa anterior es:
Using Constructor
-1193959466
Using Method
-1133938638
¿Qué sucede si pasamos la misma semilla a dos generadores de números aleatorios diferentes? Veamos el siguiente programa y veamos qué sucede si pasamos la misma semilla a dos generadores de números aleatorios diferentes.
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Using Same Seed Example Program
*
*/
public class RandomNumberSameSeedExample {
public static void main(String[] args) {
//inicializar dos generadores de números aleatorios usando la misma semilla
Random random1 = new Random(100);
Random random2 = new Random(100);
System.out.println(random1.nextInt());
System.out.println(random2.nextInt());
}
}
La salida del programa anterior es:
-1193959466
-1193959466
Podemos ver que generará el mismo número aleatorio si pasamos la misma semilla a dos generadores de números aleatorios diferentes.
Métodos de la clase Random de Java 8
Como puedes ver en la imagen de arriba, se han añadido muchos métodos nuevos en Java 8 a la clase Random. Estos métodos pueden producir una secuencia de números aleatorios. A continuación, se muestra un programa simple para generar una secuencia de 5 enteros entre 1 y 100.
package com.journaldev.random;
import java.util.Random;
import java.util.stream.IntStream;
public class JavaRandomExample {
public static void main(String[] args) {
Random random = new Random();
// generar secuencia de 5 enteros entre 1 y 100
IntStream ints = random.ints(5, 1, 100);
ints.forEach(System.out::println);
}
}
Eso es todo para un rápido resumen sobre la clase Random en Java. Referencia: Documentación de la API
Source:
https://www.digitalocean.com/community/tutorials/java-random