Em Java programação, muitas vezes precisávamos gerar números aleatórios enquanto desenvolvemos aplicativos. Muitos aplicativos têm o recurso de gerar números aleatoriamente , como para verificar o usuário, muitos aplicativos usam o OTP . O melhor exemplo de números aleatórios são os dados. Porque quando jogamos, obtemos um número aleatório entre 1 e 6.
Nesta seção, aprenderemos o que é um número aleatório e como gerar números aleatórios em Java .
Número aleatório
Números aleatórios são os números que usam um grande conjunto de números e selecionam um número usando o algoritmo matemático. Ele satisfaz as duas condições a seguir:
- Os valores gerados são distribuídos uniformemente em um intervalo definido.
- É impossível adivinhar o valor futuro com base nos valores atuais e passados.
Gerando Número Aleatório em Java
Em Java, existem três maneiras de gerar números aleatórios usando o método e as classes.
- Usando o aleatório() Método
- Usando o aleatório Aula
- Usando o ThreadLocalRandom Aula
- Usando o entradas() Método (em Java 8)
Usando o método Math.random()
O Java Matemática classe tem muitos métodos para diferentes operações matemáticas. Um deles é o aleatório() método. É um estático método da classe Math. Podemos invocá-lo diretamente. Ele gera apenas dobro digite um número aleatório maior ou igual a 0,0 e menos de 1,0 . Antes de usar o método random(), devemos importar ojava.lang.Mathaula.
Sintaxe:
public static double random()
Não aceita nenhum parâmetro. Ele retorna um duplo pseudoaleatório maior ou igual a 0,0 e menor que 1,0.
Vamos criar um programa que gere números aleatórios usando o método random().
RandomNumberExample1.java
import java.lang.Math; public class RandomNumberExample1 { public static void main(String args[]) { // Generating random numbers System.out.println('1st Random Number: ' + Math.random()); System.out.println('2nd Random Number: ' + Math.random()); System.out.println('3rd Random Number: ' + Math.random()); System.out.println('4th Random Number: ' + Math.random()); } }
Saída:
1st Random Number: 0.17434160924512265 2nd Random Number: 0.4297410090709448 3rd Random Number: 0.4828656381344487 4th Random Number: 0.13267917059488898
Lembrar: Cada vez que obtemos uma saída diferente quando executamos o programa. Sua saída pode ser diferente da saída mostrada acima.
Também podemos usar a seguinte fórmula se quisermos gerar um número aleatório entre um intervalo especificado.
Math.random() * (max - min + 1) + min
Na fórmula acima, o valor mínimo é inclusivo, enquanto o valor máximo é exclusivo.
Vamos criar um programa que gere números aleatórios entre 200 e 400.
RandomNumberExample2.java
public class RandomNumberExample2 { public static void main( String args[] ) { int min = 200; int max = 400; //Generate random double value from 200 to 400 System.out.println('Random value of type double between '+min+' to '+max+ ':'); double a = Math.random()*(max-min+1)+min; System.out.println(a); //Generate random int value from 200 to 400 System.out.println('Random value of type int between '+min+' to '+max+ ':'); int b = (int)(Math.random()*(max-min+1)+min); System.out.println(b); } }
Saída 1:
Random value of type double between 200 to 400: 233.88329802655377 Random value of type int between 200 to 400: 329
Saída 2:
Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284
Usando a classe aleatória
Outra maneira de gerar um número aleatório é usar o Java aleatório aula dojava.utilpacote. Ele gera um fluxo de números pseudoaleatórios. Podemos gerar um número aleatório de qualquer tipo de dados, como inteiro, flutuante, duplo, booleano, longo. Se você for usar esta classe para gerar números aleatórios, siga as etapas abaixo:
- Primeiro, importe a classejava.lang.Random.
- Criar um objeto da classe Aleatório.
- Invoque qualquer um dos seguintes métodos:
Todos os métodos acima retornam o próximo valor pseudoaleatório e distribuído homogeneamente (método correspondente) da sequência deste gerador de números aleatórios. O próximoDuplo() e próximoFloat() método gera valor aleatório entre 0,0 e 1,0.
O nextInt(int vinculado) O método aceita um limite de parâmetro (superior) que deve ser positivo. Ele gera um número aleatório no intervalo de 0 a limite-1.
Vamos criar um programa que gere números aleatórios usando a classe Random.
RandomNumberExample3.java
import java.util.Random; public class RandomNumberExample3 { public static void main(String args[]) { // creating an object of Random class Random random = new Random(); // Generates random integers 0 to 49 int x = random.nextInt(50); // Generates random integers 0 to 999 int y = random.nextInt(1000); // Prints random integer values System.out.println('Randomly Generated Integers Values'); System.out.println(x); System.out.println(y); // Generates Random doubles values double a = random.nextDouble(); double b = random.nextDouble(); // Prints random double values System.out.println('Randomly Generated Double Values'); System.out.println(a); System.out.println(b); // Generates Random float values float f=random.nextFloat(); float i=random.nextFloat(); // Prints random float values System.out.println('Randomly Generated Float Values'); System.out.println(f); System.out.println(i); // Generates Random Long values long p = random.nextLong(); long q = random.nextLong(); // Prints random long values System.out.println('Randomly Generated Long Values'); System.out.println(p); System.out.println(q); // Generates Random boolean values boolean m=random.nextBoolean(); boolean n=random.nextBoolean(); // Prints random boolean values System.out.println('Randomly Generated Boolean Values'); System.out.println(m); System.out.println(n); } }
Saída:
var global em js
Randomly Generated Integers Values 23 767 Randomly Generated Double Values 0.37823814494212016 0.998058172671956 Randomly Generated Float Values 0.87804186 0.93880254 Randomly Generated Long Values -4974823544291679198 3650240138416076693 Randomly Generated Boolean Values false true
Usando a classe ThreadLocalRandom
O ThreadLocalRandom classe é definida emjava.util.concurrentpacote. Ele é inicializado com uma semente gerada internamente, igual ao gerador aleatório da classe Math. Não pode ser modificado. Podemos usar esta classe da seguinte maneira:
ThreadLocalRandom.current().nextX(...)
Onde X é Int, Long, etc.
Nota: É impossível compartilhar um ThreadLocalRandom com vários threads acidentalmente.
Podemos gerar um número aleatório de qualquer tipo de dados, como inteiro, flutuante, duplo, booleano, longo. Se você for usar esta classe para gerar números aleatórios, siga as etapas abaixo:
- Primeiro, importe a classe usandojava.util.concurrent.ThreadLocalRandom.
- Invoque o método correspondente para o qual deseja gerar números aleatoriamente.
Todos os métodos acima substituem o método correspondente da classe Random e retornam o valor correspondente.
Os métodos acima analisam um parâmetro vinculado (superior) que deve ser positivo . Ele retorna o valor correspondente gerado aleatoriamente entre 0 (inclusivo) e o limite especificado (exclusivo). Isso joga Exceção de Argumento Ilegal se o limite for negativo.
Os métodos acima analisam dois parâmetros origem e vinculado . A origem especifica o menor valor retornado e o limite especifica o limite superior . Ele retorna o valor correspondente gerado aleatoriamente entre a origem especificada (inclusiva) e o limite (exclusivo). Além disso, lança Exceção de Argumento Ilegal se a origem for maior ou igual ao limite.
Vamos criar um programa que gera números aleatórios usando o Classe ThreadLocalRandom .
RandomNumberExample4.java
import java.util.concurrent.ThreadLocalRandom; public class RandomNumberExample4 { public static void main(String args[]) { // Generate random integers between 0 to 999 int a = ThreadLocalRandom.current().nextInt(); int b = ThreadLocalRandom.current().nextInt(); // Print random integer values System.out.println('Randomly Generated Integer Values:'); System.out.println(a); System.out.println(b); // Generate Random double values double c = ThreadLocalRandom.current().nextDouble(); double d = ThreadLocalRandom.current().nextDouble(); // Print random doubles System.out.println('Randomly Generated Double Values:'); System.out.println(c); System.out.println(d); // Generate random boolean values boolean e = ThreadLocalRandom.current().nextBoolean(); boolean f = ThreadLocalRandom.current().nextBoolean(); // Print random Booleans System.out.println('Randomly Generated Boolean Values:'); System.out.println(e); System.out.println(f); } }
Saída 1:
Randomly Generated Integer Values: 348534891 -1887936727 Randomly Generated Double Values: 0.15644440033119833 0.5242730752133399 Randomly Generated Boolean Values: true true
Saída 2:
Output 2: Randomly Generated Integer Values: 402755574 295398333 Randomly Generated Double Values: 0.4856461791062565 0.5148677091077654 Randomly Generated Boolean Values: false true
Da mesma forma, podemos usar outros métodos de Classe ThreadLocalRandom .
Geração de números aleatórios em Java 8
No Java 8, um novo método ints() foi adicionado ao Classe aleatória . Devemos importar ojava.util.Randomantes de usar o método.
entradas():
Os valores int pseudoaleatórios geraram o mesmo que chamar o método nextInt(). Ele retorna um fluxo ilimitado de valores int pseudoaleatórios.
ints (streamSize longo):
O método analisa um parâmetro streamSize do tipo longo. Ele especifica o número de valores a serem gerados. Os valores int pseudoaleatórios geraram o mesmo que chamar o método nextInt(). Ele também retorna um fluxo de valores int gerados aleatoriamente. Isso joga Exceção de argumento ilegal se o tamanho do fluxo for menor que zero.
ints(long streamSize, int randomNumberOrigin, int randomNumberBound):
Parâmetros:
Ele retorna um fluxo de valores int pseudoaleatórios com origem e limite especificados. Isso joga Exceção de argumento ilegal se:
- stramSize<0< li>
- origem > = limite 0<>
ints(int randomNumberOrigin, int randomNumberBound):
Parâmetros:
Ele retorna um fluxo ilimitado de valores int pseudoaleatórios com origem e limite especificados. Isso joga Exceção de argumento ilegal se a origem for maior ou igual ao limite.
Da mesma forma, também podemos gerar o fluxo dos tipos long e double usando o método anseia() e duplica() método, respectivamente.
Vamos criar um programa que gere um fluxo de inteiros usando o entradas() método da classe Random.
RandomNumberExample5.java
import java.util.Random; public class RandomNumberExample5 { public static void main(String[] args) { randomInts(5); randomInts(9, 50, 90); //getStreamOfRandomInts(30, 50); } //method that generates a stream of integers having size 5 public static void randomInts(int num) { Random random = new Random(); random.ints(num).forEach(System.out::println); } //method that generates a stream of 9 integers between 50 to 90 public static void randomInts(int num, int origin, int bound) { Random random1 = new Random(); random1.ints(num, origin, bound).forEach(System.out::println); } }
Saída 1:
727900357 -1073118456 306279822 370327182 1366265119 65 75 75 88 76 75 56 86 85
Saída 2:
-1338107947 -1698771421 594232770 -1224937976 -1625069815 56 69 67 87 64 52 72 75 76