| 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
|