Gerando números aleatórios em um intervalo em Java

Gerando números aleatórios em um intervalo em Java

1. Visão geral

Neste tutorial, vamos explorar diferentes maneiras de gerar números aleatórios dentro de um intervalo.

2. Gerando números aleatórios em um intervalo

2.1. Math.random

OMath.random dá um valordouble aleatório que é maior ou igual a 0,0 e menor que 1,0.

Vamos usar o métodoMath.random para gerar um número aleatório em um determinado intervalo:

public int getRandomNumber(int min, int max) {
    return (int) ((Math.random() * (max - min)) + min);
}

Por que isso funciona? Bem, vamos ver o que acontece quandoMath.random retorna 0,0, é o menor resultado possível:

0.0 * (max - min) + min => min

Então, o menor número que podemos obter émin.

SeMath.random retornar 1,0, é a maior saída possível, então obtemos:

1.0 * (max - min) + min => max - min + min => max

Então, o maior número que podemos obter émax.

Vamos ver esse mesmo padrão repetido comRandom#nextInt na próxima seção.

2.2. java.util.Random.nextInt

Uma instância dejava.util.Random também pode ser usada para fazer o mesmo.

Vamos usar o métodojava.util.Random.nextInt para obter um número aleatório:

public int getRandomNumberUsingNextInt(int min, int max) {
    Random random = new Random();
    return random.nextInt(max - min) + min;
}

O parâmetromin (a origem) é inclusivo, enquanto omax, o limite, é exclusivo

2.3. java.util.Random.ints

O métodojava.util.Random.ints retorna umIntStream de inteiros aleatórios.

Portanto, podemos utilizar o métodojava.util.Random.ints e retornar um número aleatório:

public int getRandomNumberUsingInts(int min, int max) {
    Random random = new Random();
    return random.ints(min, max)
      .findFirst()
      .getAsInt();
}

Aqui também, a origem especificadamin é inclusiva emax é exclusiva.

3. Conclusão

Neste artigo, vimos maneiras alternativas de gerar números aleatórios dentro de um intervalo.

Trechos de código, como sempre, podem ser encontradosover on GitHub.