A classe Java Random é utilizada para gerar uma série de números aleatórios.
Classe Java Random
- A classe
Random
faz parte do pacote java.util. - Uma instância da classe Random em Java é usada para gerar números aleatórios.
- Esta classe fornece vários métodos para gerar números aleatórios de tipos inteiros, double, long, float, 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 do sistema em nanossegundos.
- Se duas instâncias de Random tiverem o mesmo valor de semente, elas gerarão a mesma sequência de números aleatórios.
- A classe Java Random é segura para threads, no entanto, em ambientes multithreaded, é aconselhável usar a classe
java.util.concurrent.ThreadLocalRandom
. - As instâncias da classe Random não são adequadas para aplicações sensíveis à segurança; é melhor usar
java.security.SecureRandom
nesses casos.
Construtores da Classe Java Random
A classe Java Random possui dois construtores, conforme apresentado abaixo:
Random()
: cria um novo gerador aleatórioRandom(long seed)
: cria um novo gerador aleatório usando a semente especificada
Métodos da Classe Java Random
Vamos dar uma olhada em alguns dos métodos da classe Random do Java.
nextBoolean()
: Este método retorna o próximo valor pseudorandom, que é um valor booleano da sequência do gerador de números aleatórios.nextDouble()
: Este método retorna o próximo valor pseudorandom, que é um valor double entre 0.0 e 1.0.nextFloat()
: Este método retorna o próximo valor pseudorandom, que é um valor float entre 0.0 e 1.0.nextInt()
: Este método retorna o próximo valor int da sequência do gerador de números aleatórios.nextInt(int n)
: Este método retorna um valor pseudorandom, 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 Random em Java abaixo.
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));
}
}
A saída 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 formas de gerar números aleatórios 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 construtor
Random random = new Random(100);
System.out.println("Using Constructor");
System.out.println(random.nextInt());
//usando método
Random random2 = new Random();
random2.setSeed(200);
System.out.println("Using Method");
System.out.println(random2.nextInt());
}
}
O resultado 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());
}
}
O resultado do programa acima é:
-1193959466
-1193959466
Podemos ver que ele irá 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 métodos novos na classe Java 8 para a classe Random. Esses métodos podem produzir uma sequência de números aleatórios. Abaixo está um programa simples para gerar uma sequência de 5 números 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 rápido resumo sobre a classe Java Random. Referência: Documentação da API
Source:
https://www.digitalocean.com/community/tutorials/java-random