Generando números aleatorios en un rango en Java

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.