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!