Java Aleatório

A classe Java Random é usada para gerar uma série de números aleatórios.

Classe Random Java

  • A classe Random faz parte do pacote java.util.
  • Uma instância da classe java Random é usada para gerar números aleatórios.
  • Esta classe fornece vários métodos para gerar números aleatórios do tipo inteiro, duplo, longo, flutuante, etc.
  • O algoritmo de geração de números aleatórios funciona com o valor de semente. Se não for fornecido, o valor de semente é criado a partir do tempo nano do sistema.
  • Se duas instâncias Random tiverem o mesmo valor de semente, então elas gerarão a mesma sequência de números aleatórios.
  • A classe Java Random é segura para threads, no entanto, em um ambiente multithread, é aconselhável usar a classe java.util.concurrent.ThreadLocalRandom.
  • As instâncias da classe Random não são adequadas para aplicativos sensíveis à segurança, é melhor usar java.security.SecureRandom nesses casos.

Construtores da Classe Java Random

A classe Java Random possui dois construtores que são mostrados abaixo:

  1. Random(): cria um novo gerador aleatório
  2. Random(long seed): cria um novo gerador aleatório usando a semente especificada

Métodos da Classe Random em Java

Vamos dar uma olhada em alguns dos métodos da classe Random em Java.

  1. nextBoolean(): Este método retorna o próximo valor pseudorrandômico, que é um valor booleano, da sequência do gerador de números aleatórios.
  2. nextDouble(): Este método retorna o próximo valor pseudorrandômico, que é um valor double entre 0.0 e 1.0.
  3. nextFloat(): Este método retorna o próximo valor pseudorrandômico, que é um valor float entre 0.0 e 1.0.
  4. nextInt(): Este método retorna o próximo valor int da sequência do gerador de números aleatórios.
  5. nextInt(int n): Este método retorna um valor pseudorrandômico, que é um valor int entre 0 e o valor especificado, da sequência do gerador de números aleatórios.

Exemplo de Random em Java

Vamos dar uma olhada no programa de exemplo abaixo em Java utilizando a classe Random.

package com.journaldev.examples;

import java.util.Random;

/**
 * Java Random Number Example Program
 * 
 */
public class RandomNumberExample {

	public static void main(String[] args) {
		
		// inicializa o gerador de números aleatórios
		Random random = new Random();
		
		// gera um valor booleano
		System.out.println(random.nextBoolean());
		
		// gera um valor double
		System.out.println(random.nextDouble());
		
		// gera um valor float
		System.out.println(random.nextFloat());
		
		// gera um valor int
		System.out.println(random.nextInt());
		
		// gera um valor int within specific limit
		System.out.println(random.nextInt(20));

	}

}

O resultado do programa acima é:

false
0.30986869120562854
0.6210066
-1348425743
18

Verifique esta postagem para mais informações sobre Geração de Números Aleatórios em Java.

Gerar Número Aleatório usando Semente

Existem duas maneiras de gerar um número aleatório usando uma semente.

Random random = new Random(long seed);
                         
Random random1 = new Random();
random1.setSeed(seed);

A semente é o valor inicial do estado interno do gerador de números pseudoaleatórios que é mantido pelo método next(int).

package com.journaldev.examples;

import java.util.Random;

/**
 * Java Random Number Using Seed Example Program
 * 
 * @author pankaj
 *
 */
public class RadomSeedExample {

	public static void main(String[] args) {
		
		//usando o construtor
		Random random = new Random(100);
		System.out.println("Using Constructor");
		System.out.println(random.nextInt());
		
		//usando o método
		Random random2 = new Random();
		random2.setSeed(200);
		System.out.println("Using Method");
		System.out.println(random2.nextInt());
	}
}

A saída do programa acima é:

Using Constructor
-1193959466
Using Method
-1133938638

E se passarmos a mesma semente para dois geradores de números aleatórios diferentes? Vamos dar uma olhada no programa abaixo e ver o que acontece se passarmos a mesma semente para dois geradores de números aleatórios diferentes.

package com.journaldev.examples;

import java.util.Random;

/**
 * Java Random Number Using Same Seed Example Program
 * 
 */
public class RandomNumberSameSeedExample {

	public static void main(String[] args) {
		
		//inicializar dois geradores de números aleatórios usando a mesma semente
		Random random1 = new Random(100);
		Random random2 = new Random(100);
		
		System.out.println(random1.nextInt());
		System.out.println(random2.nextInt());

	}

}

A saída do programa acima é:

-1193959466
-1193959466

Podemos ver que ele gerará o mesmo número aleatório se passarmos a mesma semente para dois geradores de números aleatórios diferentes.

Métodos da Classe Random do Java 8

Como você pode ver na imagem acima, foram adicionados muitos novos métodos na classe Java 8 para a classe Random. Esses métodos podem gerar uma sequência de números aleatórios. Abaixo está um programa simples para gerar uma sequência de 5 inteiros entre 1 e 100.

package com.journaldev.random;

import java.util.Random;
import java.util.stream.IntStream;

public class JavaRandomExample {

	public static void main(String[] args) {

		Random random = new Random();

		// gerar sequência de 5 inteiros entre 1 e 100
		IntStream ints = random.ints(5, 1, 100);

		ints.forEach(System.out::println);
	}

}

Isso é tudo para um resumo rápido sobre a classe Random em Java. Referência: Documentação da API

Source:
https://www.digitalocean.com/community/tutorials/java-random