Hoje vamos ver como gerar um número aleatório em Java. Às vezes, precisamos gerar números aleatórios em programas Java. Por exemplo, em um jogo de dados ou para gerar uma chave de identificação aleatória 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, longos, duplos, etc.
- Também podemos usar Math.random() para gerar um número decimal. Este método internamente usa a classe Java Random.
- A classe
java.util.concurrent.ThreadLocalRandom
deve ser usada para gerar números aleatórios em um ambiente 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 números aleatórios com segurança forte. Esta classe fornece um gerador de números aleatórios criptograficamente forte. No entanto, é lento no processamento. Portanto, dependendo dos requisitos de sua aplicação, você deve decidir se usá-lo ou não.
Gerador de Números Aleatórios em Java
Vamos dar uma olhada em alguns exemplos para gerar um número aleatório em Java. Mais tarde, também veremos um programa de exemplo usando ThreadLocalRandom e SecureRandom.
1. Gerar 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, ela 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, na maioria dos casos, isso não é necessário.
//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 de 1 a 6 apenas. Abaixo está o código que mostra 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 temos que 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 um número aleatório double
Podemos usar Math.random()
ou o método nextDouble
da classe Random para gerar um número aleatório double em Java.
Random random = new Random();
double d = random.nextDouble();
double d1 = Math.random();
4. Gerar um número aleatório float
Random random = new Random();
float f = random.nextFloat();
5. Gerar um número aleatório long
Random random = new Random();
long l = random.nextLong();
6. Gerar um valor booleano aleatório
Random random = new Random();
boolean flag = random.nextBoolean();
7. Gerar uma matriz de bytes aleatória
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 de 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 a instância de ThreadLocalRandom, isso lançará 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 rápido de código com SecureRandom é fornecido abaixo.
Random random = new SecureRandom();
int rand = random.nextInt();
System.out.println(rand);
Isso é tudo sobre a geração de números aleatórios em um programa Java.
Você pode baixar o código de exemplo do nosso Repositório GitHub.
Source:
https://www.digitalocean.com/community/tutorials/random-number-generator-java