Hoje vamos aprender como gerar um número aleatório em Java. Às vezes, precisamos gerar números aleatórios em programas Java. Por exemplo, um jogo de dados ou para gerar um identificador de chave aleatório para criptografia, etc.
Gerador de Números Aleatórios em Java
Existem muitas maneiras de gerar um número aleatório em Java.
- A classe java.util.Random pode ser usada para criar números aleatórios. Ela fornece vários métodos para gerar inteiros aleatórios, longos, duplos, etc.
- Também podemos usar Math.random() para gerar um double. Este método internamente utiliza a classe Java Random.
- A classe
java.util.concurrent.ThreadLocalRandom
deve ser usada para gerar números aleatórios em ambientes multithread. Esta classe faz parte do pacote Java Concurrent e foi introduzida no Java 1.7. Esta classe possui métodos semelhantes à classe Java Random. - A classe
java.security.SecureRandom
pode ser usada para gerar um número aleatório com segurança forte. Esta classe fornece um gerador de números aleatórios criptograficamente forte. No entanto, é lenta no processamento. Portanto, dependendo dos requisitos de sua aplicação, você deve decidir se deve ou não usá-la.
Gerador de Números Aleatórios em Java
Vamos ver alguns exemplos para gerar um número aleatório em Java. Mais tarde, também veremos um programa de exemplo utilizando ThreadLocalRandom e SecureRandom.
1. Gerar um Número Inteiro Aleatório
Random random = new Random();
int rand = random.nextInt();
Sim, é tão simples gerar um número inteiro aleatório em java. Quando criamos a instância Random, ele gera um valor de semente longo que é usado em todas as chamadas de método nextXXX
. Podemos definir esse valor de semente no programa, no entanto, isso não é necessário na maioria dos casos.
//definir o valor de semente longo usando o construtor Random
Random random = new Random(123456789);
//definir o valor de semente longo usando o método setter
Random random1 = new Random();
random1.setSeed(1234567890);
2. Número Aleatório em Java entre 1 e 10
Às vezes, precisamos gerar um número aleatório dentro de um intervalo. Por exemplo, em um jogo de dados, os valores possíveis podem variar apenas de 1 a 6. Abaixo está o código mostrando como gerar um número aleatório entre 1 e 10, inclusive.
Random random = new Random();
int rand = 0;
while (true){
rand = random.nextInt(11);
if(rand !=0) break;
}
System.out.println(rand);
O argumento em nextInt(int x)
é excluído, então temos que fornecer o argumento como 11. Além disso, o 0 está incluído no número aleatório gerado, então precisamos continuar chamando o método nextInt até obtermos um valor entre 1 e 10. Você pode estender o código acima para gerar o número aleatório dentro de qualquer intervalo dado.
3. Gerar Número Aleatório do Tipo Double
Podemos usar Math.random()
ou o método nextDouble
da classe Random para gerar um número aleatório do tipo double em Java.
Random random = new Random();
double d = random.nextDouble();
double d1 = Math.random();
4. Gerar Número Aleatório do Tipo Float
Random random = new Random();
float f = random.nextFloat();
5. Gerar Número Aleatório do Tipo Long
Random random = new Random();
long l = random.nextLong();
6. Gerar Número Aleatório do Tipo Booleano
Random random = new Random();
boolean flag = random.nextBoolean();
7. Gerar Matriz de Bytes Aleatórios
Nós podemos gerar bytes aleatórios e colocá-los em uma matriz de bytes fornecida pelo usuário usando a classe Random. O número de bytes aleatórios produzidos é igual ao comprimento da matriz de bytes.
Random random = new Random();
byte[] randomByteArray = new byte[5];
random.nextBytes(randomByteArray);
System.out.println(Arrays.toString(randomByteArray)); // sample output [-70, -57, 74, 99, -78]
8. ThreadLocalRandom em Ambiente Multithread
Aqui está um exemplo simples mostrando o uso do ThreadLocalRandom em um ambiente multithread.
package com.journaldev.randomnumber;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class ThreadLocalRandomExample {
public static void main(String[] args) {
Runnable runnable = new MyRunnable();
for (int i = 0; i < 5; i++) {
Thread t = new Thread(runnable);
t.setName("MyRunnable-Thread-" + i);
t.start();
}
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
String threadName = Thread.currentThread().getName();
System.out.println(threadName + "::" + ThreadLocalRandom.current().nextInt());
}
}
Abaixo está uma saída de exemplo da execução do programa acima.
MyRunnable-Thread-0::-1744088963
MyRunnable-Thread-3::139405798
MyRunnable-Thread-1::1403710182
MyRunnable-Thread-2::-1222080205
MyRunnable-Thread-4::-185825276
Não podemos definir um valor de semente para uma instância de ThreadLocalRandom, isso lançará uma UnsupportedOperationException
. A classe ThreadLocalRandom também possui alguns métodos utilitários extras para gerar um número aleatório dentro de um intervalo. Por exemplo, para gerar um número aleatório entre 1 e 10, podemos fazer assim.
ThreadLocalRandom random = ThreadLocalRandom.current();
int rand = random.nextInt(1, 11);
O ThreadLocalRandom possui métodos semelhantes para gerar valores longos e duplos aleatórios.
9. Exemplo de SecureRandom
Você pode usar a classe SecureRandom para gerar números aleatórios mais seguros usando qualquer um dos provedores listados. Um exemplo de código SecureRandom rápido é dado abaixo.
Random random = new SecureRandom();
int rand = random.nextInt();
System.out.println(rand);
Isso é tudo sobre a geração de um número aleatório no programa Java.
Você pode baixar o exemplo de código de nosso Repositório no GitHub.
Source:
https://www.digitalocean.com/community/tutorials/random-number-generator-java