Este capítulo explica primeiro várias maneiras de gerar números aleatórios de Java e depois os demonstra através de exemplos.
Em termos gerais, existem três maneiras de gerar números aleatórios em Java:
(01). Use System.CurrentTimEmillis () para obter um número de milissegundos do tipo longo do tempo atual.
(02). Retorne um valor duplo entre 0 e 1 via Math.Random ().
(03). Gerar um número aleatório através da classe aleatória. Esta é uma classe de ferramentas aleatória profissional com funções poderosas. O primeiro método usa o System.currenttimemillis () para obter números aleatórios
Obtenha o número aleatório através do System.CurrentTimemillis (). Na verdade, está obtendo o número atual de milissegundos, que é do tipo longo. Como usá -lo é o seguinte:
final Long L = System.currenttimemillis ();
Para obter um número inteiro do tipo int, basta converter o resultado acima para digitar int. Por exemplo, obtenha um número inteiro entre [0, 100). O método é o seguinte:
final Long L = System.currenttimemillis (); final int i = (int) (L % 100);
O segundo método usa Math.Random () para obter números aleatórios
Obtenha números aleatórios através do Math.Random (). De fato, ele retorna um valor duplo entre 0 (inclusive) e 1 (não incluído). Como usá -lo é o seguinte:
final duplo d = math.random ();
Para obter um número inteiro do tipo int, basta converter o resultado acima para digitar int. Por exemplo, obtenha um número inteiro entre [0, 100). O método é o seguinte:
final duplo d = math.random (); final int i = (int) (d*100);
O terceiro tipo usa classe aleatória para obter números aleatórios
Obtenha números aleatórios através da classe aleatória.
Como usá -lo é o seguinte:
(01) Crie um objeto aleatório. Existem duas maneiras de criar um objeto aleatório, como segue:
Aleatoriamente aleatório = novo aleatório (); // construtor padrão aleatório = novo aleatório (1000); // especificar o número de sementes
(02) Obtenha números aleatórios através de objetos aleatórios. Random suporta tipos de valor aleatório: boolean, byte, int, longo, flutuante, duplo.
Por exemplo, obtenha um número inteiro entre [0, 100). O método é o seguinte:
int i2 = random.nextint (100);
Interface de função da aleatória
// construtor (i): crie um novo gerador de números aleatórios. Random () // Construtor (ii): Crie um novo gerador de números aleatórios usando uma única semente longa: public aleatoriamente (semente longa) {Setseed (semente); } O próximo método o usa para salvar o estado do gerador de números aleatórios. Random (semente longa) Boolean NextBoolean () // Retorna o próximo número de pseudo-aleatório "tipo booleano". Void NextBytes (byte [] buf) // Gere bytes aleatórios e coloque -os em Byte Matriz BUF. duplo nextDouble () // retorna um número aleatório de "tipo duplo entre [0,0, 1,0)". float nextfloat () // retorna um número aleatório de "tipo de flutuação entre [0,0, 1,0)". int nextInt () // retorna o próximo número aleatório "int tipo". int nextInt (int n) // retorna um número aleatório de "int tipo entre [0, n)". Long NextLong () // Retorna o próximo número aleatório de "tipo longo". O duplo sincronizado nextgaussian () // retorna o próximo número aleatório "Double Type", que é um valor duplo em uma distribuição gaussiana ("normalmente"), com um valor médio de 0,0 e um desvio padrão de 1,0. Conjunto de vazões sincronizadas (semente longa) // Defina a semente deste gerador de números aleatórios usando uma única semente longa.Obtenha um exemplo de número aleatório
EG1:
A seguir, é apresentado um exemplo para demonstrar as três maneiras acima de obter números aleatórios. O código -fonte é o seguinte (randomtest.java):
importar java.util.random; importar java.lang.math;/*** Programa de teste de números aleatórios java. Existem 3 maneiras de obter números aleatórios: * (01), use System.currenttimemillis () para obter um número de milissegundos do tipo longo no horário atual. * (02), retorne um valor duplo entre 0 e 1 através do Math.Random (). * (03) gerar um número aleatório através da classe aleatória. Esta é uma classe de ferramentas aleatória profissional com funções poderosas. * * @Author Skywang * @Email [email protected] */public class Randomtest {public static void main (string args []) {// retorna o número aleatório testsystemimemillis () através do sistema currenttimhilis () do sistema; // retorna o número aleatório testmathrandom () através da Random () da Math; // Crie um novo objeto aleatório com "semente de 1000" e teste a API aleatória por meio deste teste de semente de Testrandomapis (novo aleatório (1000), "1º aleatório (1000)"); testrandomapis (novo aleatório (1000), "2º aleatório (1000)"); // Crie um objeto aleatório "semente padrão" e teste a API da Random através desta semente TestRandomapis (new Random (), "1ª Random ()"); testrandomapis (novo aleatório (), "2º aleatório ()"); } / ** * Retorne um número aleatório -01: CurrentTimEmillis do sistema de teste () * / private estático void testSystemimemillis () {// final long l = System.currenttimEmillis (); // obtenha um [0, número inteiro final I = (int) (L % 100); System.out.printf ("/n ---- System.CurrentTimEmillis () ---/nl =%si =%s/n", l, i); } / ** * Retorne um número aleatório-02: Teste Random () * / private estático Void testMathrandom () {// retorna um número aleatório de tipo duplo através da função Random () da matemática, intervalo [0,0, 1.0) duplo final d = math.random (); // Obtenha um número inteiro entre [0, 100) final int i = (int) (d*100); System.out.printf ("/n ----- Math.random () ---/nd =%si =%s/n", d, i); } / ** * Retornar Número aleatório-03: Teste API da Random * / private estático void testrandomapis (aleatório aleatório, título da string) {final int buffer_len = 5; // obtém valor booleano aleatório booleano b = aleatom.nextboolean (); // obtém array aleatória buf [] byte [] buf = novo byte [buffer_len]; Random.NextBytes (BUF); // Obtenha um valor duplo aleatório, intervalo [0,0, 1,0) duplo d = aleatoriamente.nextDouble (); // Obtenha um valor de flutuação aleatório, intervalo [0,0, 1,0) float f = aleatom.nextfloat (); // Obtenha um valor aleatório int i1 = aleatória.nextInt (); // Obtenha um valor de int aleatório entre [0,100) int i2 = aleatom.nextint (100); // Obtenha uma distribuição gaussiana aleatória dupla g = aleatom.nextgaussian (); // obtenha um valor longo longo longo l = aleatom.nextlong (); System.out.printf ("/n ---%s ----/nb =%s, d =%s, f =%s, i1 =%s, i2 =%s, g =%s, l =%s, buf = [", title, b, d, f, i1, i2, g, l); para (byte bt: buf) system.out.printf ("%s", bt); System.out.println ("]"); }}
EG2:
Problema: Gere números aleatórios entre (-10,10) com dois dígitos retidos após o ponto decimal.
Solução:
1. Função de geração de números aleatórios aleatória r = novo aleatório (); r.nextfloat (); // gera números aleatórios de ponto flutuante entre (0,1). Multiplique o número aleatório acima por 10 para obter um número aleatório entre (0,10).
2. Gere um número aleatório do tipo booleano para controlar o positivo e o negativo do número: R.NextBoolean ();
3. O método para reter dois lugares decimais: Math.floor (n*100+0,5)/100; O número obtido é do tipo duplo.
O código é o seguinte:
importar java.util.*; public class CreaterAndom {public float numrandom () {float num; Aleatório r = novo aleatório (); valor float = (float) (math.floor (r.nextfloat ()*1000+0,5)/100); Booleano B = R.NextBoolean (); if (b) {num = value; } else {num = 0-valor; } retornar num; } public static void main (string [] args) {CreaterAndom Cr = new CreaterAndom (); float num = cr.numrandom (); System.out.print (num); }}