Skip to content

10 Números aleatorios

La clase Random

En java disponemos de la clase Random para generar números aleatorios. La clase dispone de dos constructores, uno sin parámetros y otro con un parámetro llamado semilla (seed). Aunque no podemos predecir que números se generarán con una semilla particular, podemos sin embargo, duplicar una serie de números aleatorios usando la misma semilla. Es decir, cada vez que creamos un objeto de la clase Random con la misma semilla obtendremos la misma secuencia de números aleatorios. Podemos cambiar la semilla de los números aleatorios en cualquier momento utilizando el método setSeed.

Métodos

Algunos métodos de la clase Random para generar números aleatorios:

  • nextInt(): genera un número aleatorio entero de tipo int
  • nextInt(int n): genera un número aleatorio entero de tipo int entre 0(incluido) y n(excluido)
  • nextLong(): genera un número aleatorio entero de tipo long
  • nextFloat(): genera un número aleatorio de tipo float entre 0.0(incluido) y 1.0(excluido)
  • nextDouble(): genera un número aleatorio de tipo double entre 0.0(incluido) y 1.0(excluido)
  • nextBoolean(): genera un booleano aleatorio

Números aleatorios en un rango

Para generar números aleatorios enteros comprendidos entre un rango de dos números enteros min y max, hay que utilizar la siguiente fórmula:

nextInt(max - min + 1) + min

Por ejemplo, si queremos generar un número aleatorio entre 5 y 10: nextInt(10-5+1)+5 → nextInt(6)+5

Ejemplo de uso

En el siguiente ejemplo, se puede observar en la ejecución que utilizando el Random con semilla siempre se generan los mismos números

public class RandomClass {
    public static void main(String[] args) {
        Random random = new Random(); // Sin semilla
        Random randomSeed = new Random(3816); // Con semilla. Siempre se generan los mimos números

        System.out.println(random.nextBoolean());
        System.out.println(random.nextInt());
        System.out.println(random.nextLong());
        System.out.println(random.nextFloat());
        System.out.println(random.nextDouble());
        System.out.println(random.nextInt(6) + 5); // Genera un número aleatorio entre 5 y 10

        System.out.println(randomSeed.nextBoolean());
        System.out.println(randomSeed.nextInt());
        System.out.println(randomSeed.nextLong());
        System.out.println(randomSeed.nextFloat());
        System.out.println(randomSeed.nextDouble());
        System.out.println(randomSeed.nextInt(6) + 5); // Genera un número aleatorio entre 5 y 10
    }
}
Ejercicio

Sacar aleatoriamente lo siguiente:

  • La cara de una moneda
  • El lanzamiento de un dado
  • Un número entre 34 y 68 ambos incluidos
  • Un número decimal
  • Un día de la semana y mostrar si es fin de semana o no
  • Un mes del año y mostrar si es verano o no (entenderemos como veranos los meses de julio y agosto)