Gerador de Números Aleatórios em Java

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.

  1. 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.
  2. Também podemos usar Math.random() para gerar um double. Este método internamente utiliza a classe Java Random.
  3. 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.
  4. 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