Math.Random dentro de um for - problema RESOLVIDO

5 respostas
DaniloZagato
Boa Tarde, estou usando 2 Math.Random dentro de um for, para gerar valores aleatorios, e diferentes, só que ele está retornando valores iguais para todas as passadas do loop, segue codigo...
static void InsereDados(Funcionario funcionario[], String nomes[], String sobrenome1[]) {
        int armazena = 0; 
        int armazena2 = 0;
        for (int x = 0; x < funcionario.length; x++) {
            armazena = (1 + (int) Math.random() * funcionario.length);  /* aqui eu quero um int aleatorio de 1 até o tamanho de funcionario[] */
            armazena2 = (1 + (int) Math.random() * funcionario.length);/* Idem, só que outro valor, possivelmente diferente do primeiro*/

            funcionario[x].nome = (nomes[armazena] + " " + sobrenome1[armazena]);
            funcionario[x].salario = (650.0f + (float) Math.random() * 2200.00f);
            funcionario[x].codigo = x;
      }
  }
o erro deve ser bobo, mais eu não consigo ver, se alguem puder me dê uma dica, pois quando imprimo o vetor, está todos com dados iguais...[img]

5 Respostas

Elizeu_Santos

o random 1 retorna o mesmo valor do random 2?
se sim, deve ser por que o random é baseado em milisegundos ou em clips do seu processador. nunca usei random em java, mas no C++ e no C# é assim.

Vinicius_Zibetti_Res

Tenta usa o Random;

static void InsereDados(Funcionario funcionario[], String nomes[], String sobrenome1[]) {
        int armazena = 0; 
        int armazena2 = 0;
        //tenta assim:
        Randon rd1 = new Random();
        for (int x = 0; x &lt; funcionario.length; x++) {
            armazena = (1 + rd1.nextInt(MAX) * funcionario.length);  /* aqui eu quero um int aleatorio de 1 até o tamanho de funcionario[] */
            armazena2 = (1 + rd1.nextInt(MAX) * funcionario.length);/* Idem, só que outro valor, possivelmente diferente do primeiro*/

            funcionario[x].nome = (nomes[armazena] + &quot; &quot; + sobrenome1[armazena]);
            funcionario[x].salario = (650.0f + rd1.nextFloat() * 2200.00f);
            funcionario[x].codigo = x;
      }
  }
romarcio
DaniloZagato:
Boa Tarde, estou usando 2 Math.Random dentro de um for, para gerar valores aleatorios, e diferentes, só que ele está retornando valores iguais para todas as passadas do loop, segue codigo...
static void InsereDados(Funcionario funcionario[], String nomes[], String sobrenome1[]) {
        int armazena = 0; 
        int armazena2 = 0;
        for (int x = 0; x < funcionario.length; x++) {
            armazena = (1 + (int) Math.random() * funcionario.length);  /* aqui eu quero um int aleatorio de 1 até o tamanho de funcionario[] */
            armazena2 = (1 + (int) Math.random() * funcionario.length);/* Idem, só que outro valor, possivelmente diferente do primeiro*/

            funcionario[x].nome = (nomes[armazena] + " " + sobrenome1[armazena]);
            funcionario[x].salario = (650.0f + (float) Math.random() * 2200.00f);
            funcionario[x].codigo = x;
      }
  }
o erro deve ser bobo, mais eu não consigo ver, se alguem puder me dê uma dica, pois quando imprimo o vetor, está todos com dados iguais...
Você precisa separar com parenteses a operação do Math.random(). Você fez assim:
armazena = (1 + (int) Math.random() * funcionario.length);
E deve ser assim:
armazena = (1 + (int) ( Math.random() * funcionario.length ) );
E se ainda quiser garantir que nenhuma vez o random seja o mesmo, pode testar e se forem iguais, gera o segundo de novo:
do {
                armazena2 = (1 + (int) (Math.random() * funcionario.length));/* Idem, só que outro valor, possivelmente diferente do primeiro*/
            } while (armazena == armazena2);
DaniloZagato

Muito obrigado a todos, romarcio resolvi o problema separando por parenteses, erros bobos, vou prestar mais atenção da proxima vez, muito obrigado :wink:

romarcio

Legal. Coloca seu post como resolvido. Edita o 1° post e coloca ao lado do titulo: [RESOLVIDO]
:thumbup:

Criado 31 de março de 2012
Ultima resposta 1 de abr. de 2012
Respostas 5
Participantes 4