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)