números gerados aleatoriamente têm muitos usos em programas de computador, como a criação de imprevisibilidade nos jogos, modelagem de simulação e realização de criptografia. Java fornece duas técnicas para a geração de números aleatórios. A biblioteca de matemática oferece um método aleatório simples, mas conveniente , para a geração de um valor de ponto flutuante aleatório entre 0 e 1,0 . A classe Random fornece capacidades de geração de números aleatórios mais flexíveis. números geradores
aleatórios são usados em programação de jogos de azar.
Basics
Um gerador de números aleatórios é uma rotina destinada a produzir um valor numérico que parece escolhido por acaso. Em Java, como em todas as linguagens de programação , os valores gerados por Math.random ( ) ea classe Random parecem aleatórios , mas na verdade não são. Portanto, tais métodos são ditas para produzir números pseudo-aleatórios
Propriedades
geradores de números pseudo- aleatórios têm duas propriedades básicas: . Distribuição de sementes e < . br>
a " distribuição " refere-se à freqüência com que cada valor em uma série de números gerados aparece. A maioria dos métodos aleatórios do Java produzir uma distribuição uniforme de números , ou seja, ninguém valor irá aparecer com mais freqüência do que qualquer outro . A classe Random tem um método , nextGaussian , que gera números que seguem um Gaussian (também "normal " ou " curva de sino " ) de distribuição.
A "semente " é um número usado para inicializar um número pseudo-aleatório gerador . Dada a mesma semente , um gerador de números pseudo -aleatórios produzirá uma série idêntica de números de chamada , quando usando os mesmos métodos e parâmetros . A capacidade de reproduzir um conjunto de números é útil na depuração, testes e outros cenários onde recriar ambiente em execução de uma aplicação é necessária.
Math.random
()
A método Math.random () é um gerador simples de números pseudo- aleatórios. Ele é usado simplesmente ligando Math ( ) . O método retorna uma dupla entre 0,0 (inclusive) e 1,0 (exclusive) . Os valores produzidos seguem uma distribuição uniforme . Se um intervalo diferente, tipo ou distribuição são necessárias , o programador deve converter os resultados para o tipo desejado e realizar cálculos adicionais para gerar o resultado desejado.
The Random Classe
a classe Random é mais flexível do Math.random () , mas requer um pouco mais de esforço para usar. Uma instância da classe Random é construído. O construtor terá um inteiro desde que o valor de semente , ou se um valor de semente não é fornecido , ele usará a hora atual em milissegundos como a semente padrão. A classe Random fornece um método para a fixação da semente , após a construção . Existem vários métodos de geração de número pseudo -aleatório nesta classe, cada prefixadas com a palavra "próximo". A maioria destes métodos retornam valores uniformemente distribuídos em várias faixas e de vários tipos, tais como inteiros, valores de ponto flutuante e valores booleanos . O método retorna nextGaussian duplos distribuídos Gauss . O método nextInt pode tirar um parâmetro inteiro que define o limite superior do intervalo.
Considerações
está gerando um conjunto de números que não podem ser previstos por vezes desejável , por exemplo, para evitar que os jogadores sejam capazes de trapacear em jogos. Os valores de pseudo - aleatório retornados por várias instâncias de classe Random podem ser combinadas para fornecer aleatoriedade adicional no conjunto resultante . A implementação de uma distribuição não uniforme também pode ser útil .
Java gera números pseudo-aleatórios que seguem tanto uma distribuição de Gauss ou uniforme . Distribuições não uniformes são úteis , principalmente em simulações para imitar cenários que estejam em conformidade com as distribuições específicas em realidade. Outras distribuições podem ser alcançados utilizando a função de distribuição cumulativa inversa da distribuição desejada . Esta função tem uma probabilidade ( um valor entre 0,0 e 1,0 exclusivo) como parâmetro. Os resultados de ambos não nulos Math.random () ou um dos métodos de classe Random que retorna um valor de ponto flutuante pode ser usado para este parâmetro. Consulte a seção Recursos para obter um link para o Math Library Apache , que fornece métodos inversos para várias distribuições cumulativas .