Uso do Random

Pessoal,

estou tentando gerar um número aleatório mas ele sempre se repete…

Tenho uma classe que em seu construtor deve gerar um número e guardar em um atributo, só que essa classe é instanciada diversas vezes e o número é sempre o mesmo.

Eu estou dentro de um for onde o objeto dessa classe é criado diversas vezes e em todas tentativas o número se repete.

O código abaixo não é exataemente o que estou executando, é mais para dar uma idéia de como estou trabalhando, portanto não se preocupem com possíveis erros de sintaxe…

  public class Teste{
  
  private int randomico;

  public Teste(){
    Random rnd = new Random();
    this.randomico = rnd.nextInt(6);
  }
 }
 public classe executa{
  
  public static void main(String[] args){
   for(int x =0; x < 9;  x++)
   {
      Teste tt = new Teste();
   }
  }
 }

O engraçado é o seguinte:

Da forma abaixo funciona


  Random rnd = new Random()
  for(int x =0; x < 9;  x++)
  {
    rnd.nextInt(6);
  }

Dessa outra forma não funciona


  for(int x =0; x < 9;  x++)
  {
    Random rnd = new Random()
    rnd.nextInt(6);
  }

Tentei fazer uma gambiarra colocando a chamada do método nextInt(6) algumas vezes no construtor da classe antes de atribuir o valor à variável, mas mesmo assim não funcionou

  public class Teste{
  
  private int randomico;

  public Teste(){
    Random rnd = new Random();
    rnd.nextInt(6);
    rnd.nextInt(6);
    rnd.nextInt(6);
    this.randomico = rnd.nextInt(6);
  }
 }

Bom tutorial:
http://www.guj.com.br/java.tutorial.artigo.17.1.guj

Esperimente assim

  public class Teste{
  
  private static final  Random rnd = new Random();
  private int randomico;

  public Teste(){

    this.randomico = rnd.nextInt(6);
  }
 }

Ola,
pra ti conseguir um número diferente a cada iteração, tu precisa passar um seeder na criação do objeto Random ou utilizando o método setSeed do próprio Random.

Algo do tipo:

public class Teste{  
  
private int randomico;  
  
public Teste(){  
   Random rnd = new Random(System.currentTimeMillis());  
   this.randomico = rnd.nextInt(6);  
}  
} 

No exemplo ele pega como o seeder o tempo em milisegundos do sistema, ou seja, ele muda a cada iteração. Claro que se a iteração for muito rápida pode não dar diferença. Mas dai tu ainda pode pegar esse valor e multiplicar pelo indice do for (o i).

tipo:

Random rnd = new Random();  
for(int x =0; x < 9;  x++)  
{
  rnd.setSeed(System.currentTimeMillis());  
  rnd.nextInt(6);  
}  

Falow

Senhore,

Agradeço todas as respostas… Usei a solução postada por sergiotaborda e funcionou direitinho…

VALEU!!!