Cómo generar números aleatorios únicos en Java

Una vez que sabes cómo generar números aleatorios, a menudo ocurre que los números también tienen que ser únicos. Un buen ejemplo es elegir números de lotería. Cada número escogido al azar de un rango (por ejemplo, del 1 al 40) debe ser único, de lo contrario, el sorteo de la lotería sería inválido.

 

Uso de una colección

La manera más fácil de elegir números aleatorios únicos es poner el rango de números en una colección llamada ArrayList. Si no se ha encontrado antes con una ArrayList, es una forma de almacenar un conjunto de elementos que no tienen un número fijo. Los elementos son objetos que se pueden añadir o eliminar de la lista. Por ejemplo, hagamos el selector de números de la lotería. Necesita escoger números únicos de un rango de 1 a 40.

Primero, ponga los números en una ArrayList usando el método add(). Toma el objeto a añadir como parámetro:

 import java.util.ArrayList;

public class Lottery {

  public static void main(String[] args) {

  //define ArrayList to hold Integer objects

  ArrayList numbers = new ArrayList();

  for(int i = 0; i < 40; i++)

  {

    numbers.add(i+1);

  }

  System.out.println(numbers);

}

 

Tenga en cuenta que estamos utilizando la clase de envoltura Integer para el tipo de elemento, de modo que ArrayList contiene objetos y no tipos de datos primitivos.

 

La salida muestra el rango de números del 1 al 40 en orden:

 

 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]

Uso de la clase Colecciones

Existe una clase de utilidad llamada Colecciones que proporciona diferentes acciones que se pueden realizar en una colección como una ArrayList (por ejemplo, buscar los elementos, encontrar el elemento máximo o mínimo, invertir el orden de los elementos, etc.). Una de las acciones que puede realizar es mezclar los elementos. El orden aleatorio moverá cada elemento a una posición diferente en la lista. Para ello, utiliza un objeto aleatorio. Esto significa que es una aleatoriedad determinista, pero servirá en la mayoría de las situaciones.

 

Para barajar la ArrayList, añada la importación de colecciones a la parte superior del programa y, a continuación, utilice el método estático Barajar. Toma el ArrayList para ser barajado como un parámetro:

 

 import java.util.Collections;

import java.util.ArrayList;

public class Lottery {

  public static void main(String[] args) {

    //define ArrayList to hold Integer objects

    ArrayList numbers = new ArrayList();

    for(int i = 0; i < 40; i++)

    {

      numbers.add(i+1);

    }

    Collections.shuffle(numbers);

    System.out.println(numbers);

  }

}

Ahora la salida mostrará los elementos de ArrayList en un orden aleatorio:

 

 [24, 30, 20, 15, 25, 1, 8, 7, 37, 16, 21, 2, 12, 22, 34, 33, 14, 38, 39, 18, 36, 28, 17, 4, 32, 13, 40, 35, 6, 5, 11, 31, 26, 27, 23, 29, 19, 10, 3, 9]

 

Selección de los números unívocos

Para elegir los números aleatorios únicos, simplemente lea los elementos de ArrayList uno por uno usando el método get(). Toma la posición del elemento en la ArrayList como parámetro. Por ejemplo, si el programa de lotería necesita elegir seis números del rango del 1 al 40:

 

 import java.util.Collections;

import java.util.ArrayList;

public class Lottery {

  public static void main(String[] args) {

    //define ArrayList to hold Integer objects

    ArrayList numbers = new ArrayList();

    for(int i = 0; i < 40; i++)

    {

    numbers.add(i+1);

  }

    Collections.shuffle(numbers);

    System.out.print("This week's lottery numbers are: ");

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

    {

      System.out.print(numbers.get(j) + " ");

    }

  }

}

La salida es:

 

 This week's lottery numbers are: 6 38 7 36 1 18

(0 votes)