1. Información general
En este tutorial, exploraremos diferentes formas de generar números aleatorios dentro de un rango.
2. Generación de números aleatorios en un rango
2.1. Math.random
El Math.random da una aleatorio doble valor que es mayor que o igual a 0,0 y menor que 1,0.
Vamos a usar la Math.random método para generar un número aleatorio en un rango determinado:
public int getRandomNumber(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, su salida más alta posible, obtenemos:
1.0 * (max - min) + min => max - min + min => max
Entonces, el número más alto que podemos obtener es max.
Veamos este mismo patrón repetido con Random # nextInt en la siguiente sección.
2.2. java.util.Random.nextInt
También se puede usar una instancia de java.util.Random para hacer lo mismo.
Hagamos uso del método java.util.Random.nextInt para obtener un número aleatorio:
public int getRandomNumberUsingNextInt(int min, int max) { Random random = new Random(); return random.nextInt(max - min) + min; }
El parámetro mínimo (el origen) es inclusivo, mientras que el máximo , el límite, es exclusivo
2.3. 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 getRandomNumberUsingInts(int min, int max) { Random random = new Random(); return random.ints(min, max) .findFirst() .getAsInt(); }
Aquí también, el origen mínimo especificado es inclusivo y el máximo es exclusivo.
3. Conclusión
En este artículo, vimos formas alternativas de generar números aleatorios dentro de un rango.
Los fragmentos de código, como siempre, se pueden encontrar en GitHub.