Artigo original: Java Random Number Generator – How to Generate Integers With Math Random
Números aleatórios gerados por computador entram em duas categorias possíveis: números verdadeiramente aleatórios e pseudoaleatórios.
Os números verdadeiramente aleatórios são gerados com base em fatores externos. Por exemplo, gerar aleatoriedade usando ruídos circundantes.
Porém, gerar números verdadeiramente aleatórios assim é uma tarefa que leva tempo. Por isso, podemos utilizar números pseudoaleatórios, que são gerados usando um algoritmo e um valor de seed.
Esses números pseudoaleatórios são o bastante para a maioria dos fins. Por exemplo, você pode usá-los em criptografia, na criação de jogos, como jogos de dados ou de cartas, bem como na geração de números de OTPs (em inglês, one-time passwords ou senhas de uso único).
Neste artigo, aprenderemos como gerar números pseudoaleatórios usando Math.random()
em Java.
1. Usar Math.random() para gerar números inteiros
Math.random()
retorna um número pseudoaleatório do tipo double, maior que ou igual a zero e inferior a um.
Vamos experimentar usando código:
public static void main(String[] args) {
double randomNumber = Math.random();
System.out.println(randomNumber);
}
// resultado nº1 = 0.5600740702032417
// resultado nº2 = 0.04906751303932033
randomNumber
nos dará um número aleatório diferente para cada execução.
Digamos que nossa ideia é gerar números aleatórios dentro de um intervalo específico – por exemplo, de zero a quatro.
// gerar números aleatórios entre 0 e 4
public static void main(String[] args) {
// Math.random() gera um número aleatório entre 0.0 e 0.999
// Assim, Math.random()*5 estará entre 0.0 e 4.999
double doubleRandomNumber = Math.random() * 5;
System.out.println("doubleRandomNumber = " + doubleRandomNumber);
// fazer o casting do número para um número inteiro
int randomNumber = (int)doubleRandomNumber;
System.out.println("randomNumber = " + randomNumber);
}
/* Resultado nº1
doubleRandomNumber = 2.431392914284627
randomNumber = 2
*/
Quando fazemos o casting de um double para um int, o valor de int mantém apenas a parte inteira do número.
Por exemplo, no código acima, doubleRandomNumber
é 2.431392914284627
. A parte inteira de doubleRandomNumber
é 2
e a parte fracionária (números após a casa decimal) é 431392914284627
. Assim, randomNumber
guardará apenas a parte inteira do número, 2
.
Você pode ler mais sobre o método Math.random()
na documentação do Java (em inglês).
Usar Math.random()
não é a única forma de gerar números aleatórios em Java. A seguir, veremos como gerar números aleatórios usando a classe Random.
2. Usar a classe Random para gerar números inteiros
Na classe Random, temos muitos métodos de instância que fornecem números aleatórios. Nesta seção, trataremos de dois métodos de instância, nextInt(int bound)
e nextDouble()
.
Como usar o método nextInt(int bound)
nextInt(int bound)
retorna um número pseudoaleatório do tipo int, maior que ou igual a zero e menos que o valor de bound.
O parâmetro bound
especifica o intervalo. Por exemplo, se especificarmos que bound (limite, em inglês) é 4, nextInt(4)
retornará um valor do tipo int, maior que ou igual a zero e menor que quatro. 0,1,2,3 são os resultados possíveis de nextInt(4)
.
Como esse é um método de instância, devemos criar um objeto da classe Random para acessá-lo. Vamos praticar.
public static void main(String[] args) {
// criar um objeto da classe Random
Random random = new Random();
// gerar um número aleatório de 0 a 3
int number = random.nextInt(4);
System.out.println(number);
}
Como usar o método nextDouble()
Do mesmo modo que em Math.random()
, nextDouble()
retorna um número pseudoaleatório do tipo double, maior que ou igual a zero e menor que um.
public static void main(String[] args) {
// criar um objeto da classe Random
Random random = new Random();
// gerar um número aleatório de 0.0 até 0.99...
double number = random.nextDouble();
System.out.println(number);
}
Para mais informações, é possível ler sobre a classe Random na documentação do Java (em inglês).
Que método para gerar números aleatórios devemos usar?
Math.random()
usa a classe Random. Se queremos apenas números do tipo double em nossa aplicação, então podemos usar Math.random()
.
Do contrário, podemos usar a classe Random, já que ela fornece vários métodos para gerar números pseudoaleatórios de tipos diferentes, como nextInt()
, nextLong()
, nextFloat()
e nextDouble()
.
Obrigado pela leitura.
A imagem da capa é de Brett Jordan e obtida no Unsplash
Você também pode se comunicar com o autor pelo Medium.
Feliz programação!