Generador de Números Aleatorios en Java

Hoy veremos cómo generar un número aleatorio en Java. A veces necesitamos generar números aleatorios en programas Java. Por ejemplo, en un juego de dados o para generar una clave aleatoria para encriptación, etc.

Generador de Números Aleatorios en Java

Hay muchas maneras de generar un número aleatorio en Java.

  1. La clase java.util.Random se puede usar para crear números aleatorios. Proporciona varios métodos para generar enteros, longs, doubles, etc.
  2. También podemos usar Math.random() para generar un double. Este método utiliza internamente la clase Java Random.
  3. La clase java.util.concurrent.ThreadLocalRandom debería usarse para generar números aleatorios en un entorno multinúcleo. Esta clase es parte del paquete Java Concurrent e se introdujo en Java 1.7. Tiene métodos similares a la clase Java Random.
  4. La clase java.security.SecureRandom se puede usar para generar números aleatorios con una seguridad fuerte. Esta clase proporciona un generador de números aleatorios criptográficamente fuerte. Sin embargo, es lento en el procesamiento. Entonces, según los requisitos de tu aplicación, debes decidir si usarlo o no.

Generador de números aleatorios en Java

Echemos un vistazo a algunos ejemplos para generar un número aleatorio en Java. Más adelante, también veremos un programa de ejemplo de ThreadLocalRandom y SecureRandom.

1. Generar un entero aleatorio

Random random = new Random();

int rand = random.nextInt();

Sí, es así de simple generar un entero aleatorio en Java. Cuando creamos la instancia de Random, genera un valor de semilla largo que se utiliza en todas las llamadas de método nextXXX. Podemos establecer este valor de semilla en el programa, sin embargo, no es necesario en la mayoría de los casos.

// establecer el valor de semilla largo usando el constructor de Random
Random random = new Random(123456789);

// establecer el valor de semilla largo usando el método setter
Random random1 = new Random();
random1.setSeed(1234567890);

2. Número aleatorio en Java entre 1 y 10

A veces tenemos que generar un número aleatorio dentro de un rango. Por ejemplo, en un juego de dados, los valores posibles pueden estar entre 1 y 6 solamente. A continuación se muestra el código que muestra cómo generar un número aleatorio entre 1 y 10, inclusive.

Random random = new Random();
int rand = 0;
while (true){
    rand = random.nextInt(11);
    if(rand !=0) break;
}
System.out.println(rand);

El argumento en el método `nextInt(int x)` está excluido, por lo que debemos proporcionar el argumento como 11. Además, el 0 está incluido en el número aleatorio generado, por lo que tenemos que seguir llamando al método `nextInt` hasta que obtengamos un valor entre 1 y 10. Puedes extender el código anterior para generar el número aleatorio dentro de cualquier rango dado.

3. Generar número aleatorio double

Podemos usar `Math.random()` o el método `nextDouble` de la clase Random para generar un número double aleatorio en Java.

Random random = new Random();

double d = random.nextDouble();

double d1 = Math.random();

4. Generar número aleatorio float

Random random = new Random();

float f = random.nextFloat();

5. Generar número aleatorio long

Random random = new Random();

long l = random.nextLong();

6. Generar booleano aleatorio

Random random = new Random();

boolean flag = random.nextBoolean();

7. Generar una matriz de bytes aleatoria

Podemos generar bytes aleatorios y colocarlos en una matriz de bytes proporcionada por el usuario usando la clase Random. El número de bytes aleatorios producidos es igual a la longitud de la matriz de bytes.

Random random = new Random();

byte[] randomByteArray = new byte[5];

random.nextBytes(randomByteArray);

System.out.println(Arrays.toString(randomByteArray)); // sample output [-70, -57, 74, 99, -78]

8. ThreadLocalRandom en un entorno multihilo

Aquí hay un ejemplo simple que muestra el uso de ThreadLocalRandom en un entorno multihilo.

package com.journaldev.randomnumber;

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class ThreadLocalRandomExample {

	public static void main(String[] args) {
		Runnable runnable = new MyRunnable();

		for (int i = 0; i < 5; i++) {
			Thread t = new Thread(runnable);
			t.setName("MyRunnable-Thread-" + i);
			t.start();
		}
	}

}

class MyRunnable implements Runnable {

	@Override
	public void run() {
		String threadName = Thread.currentThread().getName();
		System.out.println(threadName + "::" + ThreadLocalRandom.current().nextInt());
	}

}

A continuación se muestra una salida de muestra de la ejecución del programa anterior.

MyRunnable-Thread-0::-1744088963
MyRunnable-Thread-3::139405798
MyRunnable-Thread-1::1403710182
MyRunnable-Thread-2::-1222080205
MyRunnable-Thread-4::-185825276

No podemos establecer un valor de semilla para una instancia de ThreadLocalRandom, lanzará una UnsupportedOperationException. La clase ThreadLocalRandom también tiene algunos métodos de utilidad adicionales para generar un número aleatorio dentro de un rango. Por ejemplo, para generar un número aleatorio entre 1 y 10, podemos hacerlo de la siguiente manera.

ThreadLocalRandom random = ThreadLocalRandom.current();
		
int rand = random.nextInt(1, 11);

ThreadLocalRandom tiene métodos similares para generar valores aleatorios largos y dobles.

9. Ejemplo de SecureRandom

Puedes usar la clase SecureRandom para generar números aleatorios más seguros utilizando cualquiera de los proveedores listados. A continuación se muestra un ejemplo de código rápido de SecureRandom.

Random random = new SecureRandom();

int rand = random.nextInt();

System.out.println(rand);

Eso es todo acerca de generar un número aleatorio en un programa Java.

Puedes descargar el código de ejemplo desde nuestro Repositorio de GitHub.

Source:
https://www.digitalocean.com/community/tutorials/random-number-generator-java