Math.random em Java: como gerar números aleatórios
Os números aleatórios são úteis para muitas finalidades, como geração de dados de teste, simulação de jogos, criptografia e muito mais. Neste artigo, aprenderemos como usar o Math.random() método em Java para gerar números pseudoaleatórios. Também veremos alguns exemplos de como usar esse método para diferentes cenários. Finalmente, discutiremos as vantagens e desvantagens de usar Math.random() em comparação com outras alternativas.
math.random in java
Introdução
O que é Math.random?
O Math.random() é um método estático do Matemática classe em Java. Ele retorna um dobro valor maior ou igual a 0.0 e menos que 1.0. O valor é gerado por uma fórmula que simula a aleatoriedade, mas não é verdadeiramente aleatória. Em vez disso, é chamado de pseudo-aleatório, porque segue um padrão determinístico que pode ser previsto se o valor da semente for conhecido.
Como usar o Math.random?
Para usar o Math.random() método, podemos simplesmente chamá-lo usando o nome da classe Matemática, sem criar um objeto do Matemática aula. Por exemplo:
double randomNumber = Math.random(); System.out.println(randomNumber);
Isso imprimirá um número aleatório entre 0.0 e 1.0, como 0.45950063688194265.
Se quisermos gerar um número aleatório dentro de um intervalo específico, podemos multiplicar o resultado de Math.random() pelo tamanho do intervalo e adicione o limite inferior do intervalo. Por exemplo, se queremos gerar um número aleatório entre 10 e 20, nós podemos fazer:
double randomNumber = Math.random() * 10 + 10; System.out.println(randomNumber);
Isso imprimirá um número aleatório entre 10.0 e 20.0, como 15.09244621979338.
Exemplos de Math.random
Exemplo 1: gerar um número aleatório entre 0 e 1
Este é o caso de uso mais simples de Math.random(). Podemos apenas chamar o método e imprimir o resultado. Por exemplo:
public class RandomExample1 public static void main(String[] args) // gera número aleatório double randomNumber = Math.random(); // imprime o número aleatório System.out.println(randomNumber);
A saída será diferente toda vez que executarmos este código, mas sempre estará entre 0.0 e 1.0.
Exemplo 2: gerar um número aleatório dentro de um intervalo
Para gerar um número aleatório dentro de um intervalo, podemos usar a fórmula:
randomNumber = Math.random() * (max - min) + min;
Isso irá gerar um número aleatório entre min e máximo, onde ambos os limites são inclusivos. Por exemplo, se queremos gerar um número aleatório entre 5 e 15, nós podemos fazer:
public class RandomExample2 public static void main(String[] args) // define o intervalo int min = 5; int máximo = 15; // gera um número aleatório double randomNumber = Math.random() * (max - min + 1) + min; // imprime o número aleatório System.out.println(randomNumber);
A saída será diferente toda vez que executarmos este código, mas sempre estará entre 5.0 e 15.0.
Exemplo 3: gerar um número inteiro aleatório
Para gerar um número inteiro aleatório, podemos usar o (int) cast para truncar a parte decimal do resultado de Math.random(). Por exemplo, se quisermos gerar um número inteiro aleatório entre 0 e 9, nós podemos fazer:
public class RandomExample3 public static void main(String[] args) // gera número aleatório int randomNumber = (int) (Math.random() * 10); // imprime o número aleatório System.out.println(randomNumber);
A saída será diferente toda vez que executarmos este código, mas sempre será um número inteiro entre 0 e 9.
Exemplo 4: Gerar um elemento aleatório de uma matriz
Para gerar um elemento aleatório de uma matriz, podemos usar o Math.random() para gerar um índice aleatório dentro dos limites da matriz e, em seguida, acessar o elemento nesse índice.Por exemplo, se tivermos um array de nomes, podemos fazer:
public class RandomExample4 public static void main(String[] args) // define array String[] nomes = "Alice", "Bob", "Charlie", "David", "Eve"; // gera índice aleatório int index = (int) (Math.random() * names.length); // obtém elemento aleatório String name = names[index]; // imprime elemento aleatório System.out.println(name);
A saída será diferente toda vez que executarmos esse código, mas sempre será um dos nomes do array.
Vantagens e desvantagens de Math.random
Vantagens
Simples e fácil de usar
O Math.random() método é muito simples e fácil de usar. Ele não requer nenhum parâmetro ou argumento e retorna um valor duplo que pode ser facilmente manipulado para diferentes propósitos. Também é um método estático, o que significa que não precisamos criar um objeto do Matemática classe para usá-lo.
Não há necessidade de criar um objeto da classe Random
O Math.random() O método é uma alternativa ao uso do Aleatório class em Java, que é outra maneira de gerar números pseudo-aleatórios. O Aleatório A classe fornece mais métodos e opções para gerar diferentes tipos de valores aleatórios, como booleanos, bytes, floats, longs e assim por diante. No entanto, para usar o Aleatório classe, precisamos criar um objeto dela e passar um valor de semente para seu construtor. Isso pode ser complicado e desnecessário para alguns casos simples.
Desvantagens
Não é verdadeiramente aleatório
O Math.random() O método não é realmente aleatório, porque usa uma fórmula que produz uma sequência previsível de valores com base em um valor inicial. O valor inicial é determinado pelo relógio do sistema quando a JVM é iniciada. Isso significa que, se conhecermos o valor da semente e a fórmula, podemos prever os próximos valores que serão gerados por Math.random(). Isso pode ser um problema para aplicativos que exigem alta segurança ou aleatoriedade, como criptografia ou jogos de azar.
Não thread-safe
O Math.random() O método não é thread-safe, o que significa que não é seguro usá-lo em ambientes multithread. Isso ocorre porque vários threads podem acessar e modificar a mesma variável compartilhada que armazena o valor de semente para Math.random(). Isso pode levar a resultados inconsistentes ou incorretos. Para evitar esse problema, podemos usar o TópicoLocalAleatório class em vez disso, que fornece geradores de números pseudo-aleatórios locais de thread para cada thread. Por exemplo:
public class RandomExample5 public static void main(String[] args) // gera número aleatório usando ThreadLocalRandom int randomNumber = ThreadLocalRandom.current().nextInt(10); // imprime o número aleatório System.out.println(randomNumber);
Isso imprimirá um número inteiro aleatório entre 0 e 9, mas será diferente para cada thread que chama esse código.
Conclusão
Neste artigo, aprendemos como usar o Math.random() método em Java para gerar números pseudoaleatórios. Vimos alguns exemplos de como usar esse método para diferentes cenários, como gerar números aleatórios dentro de um intervalo, gerar números inteiros aleatórios e gerar elementos aleatórios de um array. Também discutimos as vantagens e desvantagens de usar Math.random() em comparação com outras alternativas, como Aleatório classe e o TópicoLocalAleatório aula. nós aprendemos que Math.random() é simples e fácil de usar, mas não é verdadeiramente aleatório ou thread-safe.
perguntas frequentes
Aqui estão algumas perguntas frequentes sobre Math.random() em Java:
Como posso gerar um número aleatório entre 0 e 100?
Para gerar um número aleatório entre 0 e 100, você pode usar a fórmula:
randomNumber = Math.random() * 101;
Isso gerará um número aleatório entre 0,0 e 100,0, onde ambos os limites são inclusivos. Se você deseja gerar um número inteiro, pode converter o resultado para (int).
Como posso gerar um valor booleano aleatório?
Para gerar um valor booleano aleatório, você pode usar o Aleatório classe em vez de Math.random(). O Aleatório classe tem um método chamado nextBoolean(), que retorna um valor booleano aleatório. Por exemplo:
Aleatório aleatório = new Aleatório(); boolean randomBoolean = random.nextBoolean(); System.out.println(randomBoolean);
Isso irá imprimir ou verdadeiro ou falso, com igual probabilidade.
Como posso alterar o valor inicial de Math.random()?
Você não pode alterar o valor de semente de Math.random(), porque é determinado pelo relógio do sistema quando a JVM é iniciada. Se você quiser alterar o valor da semente, você pode usar o Aleatório classe em vez disso, o que permite que você passe um valor de semente para seu construtor. Por exemplo:
Aleatório aleatório = novo Aleatório(1234); // passa qualquer valor longo como semente double randomNumber = random.nextDouble(); System.out.println(randomNumber);
Isso imprimirá um número pseudo-aleatório com base no valor inicial 1234.
Como posso gerar um número aleatório de uma distribuição normal?
Para gerar um número aleatório de uma distribuição normal, você pode usar o Aleatório classe em vez de Math.random(). O Aleatório classe tem um método chamado próximoGaussian(), que retorna um valor duplo aleatório com média 0 e desvio padrão 1. Por exemplo:
Aleatório aleatório = new Aleatório(); double randomNumber = random.nextGaussian(); System.out.println(randomNumber);
Isso imprimirá um número pseudoaleatório de uma distribuição normal.
Como posso gerar um número aleatório seguro?
Para gerar um número aleatório seguro, você pode usar o SecureRandom classe em vez de Math.random(). O SecureRandom class fornece geradores de números pseudo-aleatórios criptograficamente fortes que são adequados para aplicativos sensíveis à segurança. Por exemplo:
SecureRandom SecureRandom = new SecureRandom(); byte[] bytes = novo byte[16]; // cria um array de bytes secureRandom.nextBytes(bytes); // preenche o array com bytes aleatórios System.out.println(Arrays.toString(bytes)); // imprime a matriz
Isso imprimirá uma matriz de 16 bytes aleatórios. 0517a86e26
Comments