¿Quieres saber cómo generar números aleatorios en Java?

Generar una serie de números aleatorios es una de esas tareas comunes que surgen de vez en cuando. En Java, se puede lograr simplemente usando la clase java.util.Random.

 

El primer paso, como con el uso de cualquier clase de API, es poner la declaración de importación antes del inicio de su clase de programa:

 

 import java.util.Random;

 

A continuación, cree un objeto aleatorio:

 

 Random rand = new Random();

El objeto Random le proporciona un generador de números aleatorios simple. Los métodos del objeto dan la habilidad de escoger números al azar. Por ejemplo, los métodos nextInt() y nextLong() devolverán un número que está dentro del rango de valores (negativo y positivo) de los tipos de datos int y long respectivamente:

 

 Random rand = new Random();

for (int j=0;j < 5;j++)

{

  System.out.printf("%12d ",rand.nextInt());

  System.out.print(rand.nextLong());

  System.out.println();

}

 

Los números devueltos serán elegidos aleatoriamente en valores int y long:

 

 -1531072189 -1273932119090680678

1849305478  6088686658983485101

1043154343  6461973185931677018

1457591513  3914920476055359941

-1128970433 -7917790146686928828

Selección de números aleatorios de un rango determinado

Normalmente, los números aleatorios que se generarán deben ser de un rango determinado (por ejemplo, entre 1 y 40 inclusive). Para ello, el método nextInt() también puede aceptar un parámetro int. Indica el límite superior del rango de números. Sin embargo, el número de límite superior no se incluye como uno de los números que se pueden seleccionar. Esto puede sonar confuso pero el método nextInt() funciona desde cero en adelante. Por ejemplo:

 

 Random rand = new Random();

rand.nextInt(40);

 

sólo escogerá un número aleatorio de 0 a 39 inclusive. Para escoger de un rango que comienza con 1, simplemente añada 1 al resultado del método nextInt(). Por ejemplo, para elegir un número entre 1 y 40 inclusive, añada uno al resultado:

 

 Random rand = new Random();

int pickedNumber = rand.nextInt(40) + 1;

Si el rango comienza desde un número más alto que uno, tendrá que hacerlo:

 

  • menos el número inicial del número del límite superior y luego sumar uno.
  • añadir el número de inicio al resultado del método nextInt().

 

Por ejemplo, para elegir un número de 5 a 35 inclusive, el número límite superior será 35-5+1=31 y se debe agregar 5 al resultado:

 

 Random rand = new Random();

int pickedNumber = rand.nextInt(31) + 5;

 

¿Qué tan aleatoria es la clase aleatoria?

Debo señalar que la clase Random genera números aleatorios de una manera determinista. El algoritmo que produce la aleatoriedad se basa en un número llamado semilla. Si se conoce el número de semilla, entonces es posible calcular los números que se van a producir a partir del algoritmo. Para probar esto, usaré los números de la fecha en que Neil Armstrong pisó la Luna por primera vez como mi número de semilla (20 de julio de 1969).

 import java.util.Random;

public class RandomTest {;

  public static void main(String[] args) {

    Random rand = new Random(20071969);

    for (int j = 0; j

 

No importa quién ejecute este código, la secuencia de números "aleatorios" producidos será:

 

 3 0 3 0 7 9 8 2 2 5

 

Por defecto, el número de semilla que utiliza:

 

 Random rand = new Random();

 

es la hora actual en milisegundos desde el 1 de enero de 1970. Normalmente esto producirá números suficientemente aleatorios para la mayoría de los propósitos. Sin embargo, tenga en cuenta que dos generadores de números aleatorios creados en el mismo milisegundo generarán los mismos números aleatorios.

También tenga cuidado al usar la clase Random para cualquier aplicación que deba tener un generador de números aleatorios seguro (por ejemplo, un programa de apuestas). Podría ser posible adivinar el número de semillas basándose en el tiempo que la aplicación está ejecutándose. Generalmente, para aplicaciones donde los números aleatorios son absolutamente críticos, es mejor encontrar una alternativa al objeto aleatorio. Para la mayoría de las aplicaciones en las que sólo se necesita un cierto elemento aleatorio (por ejemplo, dados para un juego de mesa), entonces funciona bien.

(0 votes)