Destaques
Edicao Atual (n. 39)

 

 

Além disso, pelo Math.random() não temos o controle da seed (veremos mais adiante);

A classe java.util.Random facilita todo esse trabalho. O seguinte código cria um Random e imprime um número de 0 a 99 (o 100 não entra).

Random r = new Random();
System.out.println(r.nextInt(100));

Cada vez que você rodar o trecho de código anterior, criando um novo objeto Random e chamando o método nextInt, um número novo será gerado. Você não precisa criar um Random a todo instante, basta chamar o nextInt novamente.

Algumas vezes queremos gerar números aleatórios, porém queremos ter uma maneira de repetir aqueles mesmos números aleatórios, para realizar melhorias em nossos programas e usar a mesma base de teste. Você poderia gravar toda uma seqüência aleatória em um arquivo, e sempre ler esse arquivo novamente. Ou então podemos usar um seed.

O computador não consegue gerar um número aleatório (repare que a documentação do java.util vai sempre falar em números pseudo-aleatórios). O que ele consegue é gerar uma série de números tendo como base uma função e um número inicial. Esse número inicial chamamos de seed (semente) da nossa seqüência aleatória. A classe java.util.Random pode receber pelo construtor uma seed:

Random r = new Random(327);

Dessa maneira, o código abaixo vai sempre gerar o mesmo número, independentemente de máquina, sistema operacional, etc.:

System.out.println(r.nextInt(100)); // imprime 31 sempre por causa do seed

O construtor sem argumentos da Random usa como seed o timestamp do instante atual (System.currentTimeInMilis()).

Através da classe Random podemos também gerar Strings aleatórias. Para isso, vamos gerar seis números de 0 a 25 e somá-los ao caractere ‘a’, que vai gerar uma das letras de ‘a’ a ‘z’:

Random r = new Random(42);
StringBuilder sb = new StringBuilder(); // ou StringBuffer no java 1.4
for (int i = 0; i < 6; i++) {
char c = (char) (‘a’ + r.nextInt(26));
sb.append(c);
}

String palavra = sb.toString();
System.out.println(palavra);

Rodando o código acima, que usa a semente 42, por exemplo, a saída será: ahwmar.

A classe Random ainda possui métodos para gerar um double e outros números em que você escolhe quantos bits do número ele deve aleatorizar.

Leia o artigo completo na revista MUNDOJAVA

 

 



 
© 2003 - MundoJava - Todos os direitos reservados <design: www.id-art.com.br >