Java Aleatorio

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:

  1. Random(): crea un nuevo generador aleatorio
  2. Random(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.

  1. nextBoolean(): Este método devuelve el siguiente seudorandom, que es un valor booleano, de la secuencia del generador de números aleatorios.
  2. nextDouble(): Este método devuelve el siguiente seudorandom, que es un valor double entre 0.0 y 1.0.
  3. nextFloat(): Este método devuelve el siguiente seudorandom, que es un valor float entre 0.0 y 1.0.
  4. nextInt(): Este método devuelve el siguiente valor int de la secuencia del generador de números aleatorios.
  5. 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