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.random é 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:
poderia explicar melhor porque a multiplicação?
Os números gerados com o método nextFloat() se encontram no intervalo entre 0 e 1. Portanto, para obtermos números em outro intervalo, como entre 0 e 100, precisamos multiplicar o valor aleatório gerado por 100.
Boa noite…
gostaria de saber se tem como criar 3.000 combinações com 100 números, com 3 dezenas.
Boa tarde,
Para gerar um número aleatório entre 5 e 10, usando o Math.random(), qual a sintaxe? E outra dúvida, porque somar 1 ao final?
Obrigado.