Como posso gerar inteiros aleatórios dentro de um intervalo específico em Java?
Como posso gerar um valor aleatório de int
em um intervalo específico?
Eu tentei o seguinte, mas esses não funcionam:
Tenta 1:
randomNum = minimum + (int)(Math.random() * maximum);
// Bug: `randomNum` can be bigger than `maximum`.
Attempt 2:
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum = minimum + i;
// Bug: `randomNum` can be smaller than `minimum`.
3359
3
Em **Java 1.7 ou posterior***, a forma padrão de fazer isso é a seguinte:
Ver o JavaDoc relevante. Esta abordagem tem a vantagem de não precisar inicializar explicitamente uma instância java.util.Random, que pode ser uma fonte de confusão e erro se usada de forma inadequada.
No entanto, por outro lado, não há como definir explicitamente a semente, pelo que pode ser difícil reproduzir resultados em situações em que isso seja útil, tais como testar ou salvar estados de jogo ou similares. Nessas situações, a técnica pré-Java 1.7 mostrada abaixo pode ser usada.
Antes de Java 1.7, a forma padrão de fazer isso é a seguinte:
Ver o JavaDoc relevante. Na prática, a classe java.util.Random é frequentemente preferível a java.lang.Math.random().
Em particular, não há necessidade de reinventar a roda de geração de números inteiros aleatórios quando há uma API direta dentro da biblioteca padrão para realizar a tarefa.
Use: