Como gerar números aleatórios em Java com java.util.Random e Math.random()

Gerando números aleatórios em Java com java.util.Random e Math.random()

Neste artigo veremos como é possível gerar números aleatórios em Java usando a classe random e o método estático Math.random().

Usando classe Random

Usamos a classe Random para gerar números aleatórios em Java - na prática, números pseudoaleatórios.  É possível gerar números de vários tipos, incluindo inteiros, double e float.

Esta classe usa uma semente de 48 bits para gerar os números. Porém, ela não é criptograficamente segura. Caso você precise de um gerados de números para uso em aplicações com restrições de segurança, use a classe SecureRandom.

Para utilizar essa classe é necessário importá-la com o comando a seguir:

import java.util.Random;

Métodos da classe Random

A seguir temos os métodos específicos da classe Random disponíveis para a geração de números aleatórios.

Método Ação
next(int bits) Gera o próximo número pseudoaleatório
nextBoolean() Retorna um valor booleano pseudoaleatório
nextBytes(byte[] bytes) Gera bytes aleatórios e os coloca em um array de bytes fornecido pelo usuário
nextDouble() Retorna um valor do tipo Double entre 0.0 e 1.0
nextFloat() Retorna um valor do tipo Float entre 0.0 e 1.0
nextInt Retorna um valor do tipo Int
nextInt(int x) Retorna um valor do tipo Int entre 0 e o valor x especificado (excluindo o próprio x)
nextLong() Retorna um valor do tipo Long
nextGaussian() Retorna um valor double Gaussiano com média 0.0 e desvio padrão 1.0
setSeed(long semente) Configura a semente do gerador de números aleatórios, usando uma semente do tipo long.

Exemplo - Gerando um número inteiro aleatório qualquer:

import java.util.Random;
public class testes {
  public static void main(String[] args) {
    Random aleatorio = new Random();
    int valor = aleatorio.nextInt();
    System.out.println("Número gerado: " + valor);
  }
}

Exemplo 02: Gerando um número inteiro aleatório entre 1 e 30:

Random aleatorio = new Random();
int valor = aleatorio.nextInt(30) + 1;
System.out.println("Número gerado: " + valor);

Para gerar números entre um intervalo especificado, devemos utilizar a seguinte fórmula:

aleatorio.nextInt((max - min) + 1) + min;

onde max é o valor máximo do intervalo e min é o valor inicial do intervalo.

Exemplo 03: Gerando um número aleatório do tipo float entre 0 e 100:

Random aleatorio = new Random();
float valor = aleatorio.nextFloat() * 100;
System.out.println("Número gerado: " + valor);

Usando Math.random():

Também é possível gerar números aleatórios (pseudoaleatórios) usando o método estático random() da classe Math. Este método retorna um valor double no intervalo de 0.0 até 1.0, sem incluir este último valor (0.0 <= x < 1.0). Caso se necessite de outros intervalos de valores, será preciso efetuar operações aritméticas com os valores gerados, como por exemplo uma multiplicação.

Um dado importante sobre o método Math.tandom é que ele, internamente, utiliza a própria classe java.util.Random para gerar os números aleatórios.
Para gerar números inteiros com esse método é necessário realizar cast para int do valor gerado.

Exemplo 01:

// Gerando número aleatório entre 0 e 1 com Math.random()
import java.lang.Math;
public class aleatorio {
   public static void main(String args[]) {
      // Gerar o número aleatório
      double numAleatorio = Math.random();
      // Mostrando o número gerado na saída:
      System.out.println("Número gerado: " + numAleatorio);
   }
}

Exemplo 02:

// Gerando 5 números aleatórios inteiros entre 1 e 10 com Math.random:
import java.lang.Math;
public class aleatorio {
   public static void main(String args[]) {
     // Gerar os 5 números aleatórios e mostrá-los:
     for (int i = 0; i < 5; i++) {
        int numAleatorio = (int)(Math.random() * 10 ) + 1;
        System.out.println("Número: " + numAleatorio);
     }
   }
}

Resultado:

Gerar números aleatórios em Java com classe Random

 

Sobre Fábio dos Reis (1209 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*