Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

duvida na function sorteiaNumero

pessoal não entendi como a function não repete os numeros na leitura da variavel segredos[posicao]

 function sorteiaNumero(quantidade){

        var segredos = [];

        var numero = 1;

        while(numero <= quantidade){

           var numeroAleatorio = sorteia();
           var achou = false;

           for(var posicao = 0; posicao < segredos.length; posicao++){

           if(segredos[posicao] == numeroAleatorio){

                achou = true;
                break;

                } 
           }

           if(achou == false){

                segredos.push(numeroAleatorio);
           }

           numero++
        }

        return segredos;

    };

preciso entender porque nao teve numeros repetidos . agradeço a ajuda

2 respostas
solução!

Olá Genivaldo! A variável achou é a que controla se deve inserir na variável segredos o numeroAleatorio ou não.

Veja só. A variável achou foi inicializada com o valor false. Sendo assim, dentro do for existem duas possibilidades. Se segredos[posicao] == numeroAleatorio, ou seja, se o numeroAleatorio que vem da função sorteia() for igual a qualquer número já inserido na variável segredos (veja que o for percorre todas as posições da variável segredos) as próximas duas instruções do if são executadas:

if(segredos[posicao] == numeroAleatorio){
    achou = true;
     break;
}

Isso faz com que a variável achou passe a valer agora true e o break faz a gente sair do for, mas não do while.

Qual a próxima instrução? Outro if. Só que agora, como achou vale true o que está dentro dele não é executado, que é justamente a instrução para inserir mais um valor em segredos. Esse aqui:

if(achou == false){
    segredos.push(numeroAleatorio);
 }

Como estamos dentro do while ainda, outro numeroAleatorio é gerado, achou passa a ser false novamente e mais uma vez a seguinte verificação é feita: segredos[posicao] == numeroAleatorio. Se for verdadeiro todo o processo acima é repetido, se a verificação for falsa o que é executado é o que está dentro do próximo if: segredos.push(numeroAleatorio).

Isso garante que nenhum número seja repetido dentro de segredos.

Abraços e sucesso nos estudos!

Genivaldo, ficou claro depois da resposta do André?