En este tutorial, exploraremos diferentes formas de generar números aleatorios dentro de un rango.
Math.random
Math.random proporciona un valor doble aleatorio que es mayor o igual que 0.0 y menor que 1.0.
Usemos el método Math.random para generar un número aleatorio en un rango dado:
public int getAleatorio(int min, int max) {
return (int) ((Math.random() * (max - min)) + min);
}
¿Por qué funciona eso? Bueno, veamos qué sucede cuando Math.random devuelve 0.0, es la salida más baja posible:
0.0 * (max - min) + min => min
Entonces, el número más bajo que podemos obtener es min.
Si Math.random devuelve 1.0, es la salida más alta posible, entonces obtenemos:
1.0 * (max - min) + min => max - min + min => max
Entonces, el número más alto que podemos obtener es max.
java.util.Random.nextInt
Una instancia de java.util.Random también se puede usar para hacer lo mismo.
Usemos el método java.util.Random.nextInt para obtener un número aleatorio:
public int getNumeroAleatorio(int min, int max) {
Random random = new Random();
return random.nextInt(max - min) + min;
}
El parámetro min (el origen) es inclusivo, mientras que el máximo, el límite, es exclusivo
java.util.Random.ints
El método java.util.Random.ints devuelve un IntStream de enteros aleatorios.
Entonces, podemos utilizar el método java.util.Random.ints y devolver un número aleatorio:
public int getNumerosAleatoriosStream(int min, int max) {
Random random = new Random();
return random.ints(min, max)
.findFirst()
.getAsInt();
}
Aquí también, el origen especificado min es inclusivo y max es exclusivo.