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.

Categorized in:

Tagged in:

,