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

Dúvida exercício 08, aula 09

Pessoal, em tese era pro meu código criar apenas 10 elementos no array (ele cria 7 elementos especificamente, quando testo no Console do Google Chrome. Onde está meu erro? Segue código abaixo (se refere ao exercício 08 da Aula 09.

Obrigado!

<meta charset= "UTF-8">

<input/>

<button> Compare com o meu segredo </button>
<script> 

    function sorteia() {
        return Math.round(Math.random () * 10);
    }

    function sorteiaNumeros(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;
    }


    var segredos = sorteiaNumeros(10);

    console.log(segredos);

    var input = document.querySelector("input"); 
    input.focus();

    function verifica() {
        var achou = false;

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

            if(input.value == segredos[posicao]){
                alert("Você acertou!");
                achou = true;
                break;
            }    
        }
        if (achou == false){

            alert("Você errou!!!!!!");
        }

            input.value = "";
            input.focus();
    }    

    var button = document.querySelector("button");
    button.onclick = verifica;

</script>
3 respostas

Eduardo posa o seu código aqui

solução!

Olá Eduardo! Quando for postar algum código clique no botão <> INSERIR CÓDIGO logo acima de onde escreve as mensagens e coloque o mesmo entre os backticks (```) antes e depois do código. Editei a sua postagem aqui para ele aparecer, ok?

O que acontece é o seguinte. Do jeito que está, a variável numero é incrementada a cada passagem do while. Com isso, independente do numeroAleatorio já ter sido sorteado ou não esta variável é incrementada, mas o numeroAleatorio não é inserido em segredos caso ele já tenha sido sorteado. Você colocou que ele cria 7 elementos, mas, na verdade ele pode criar 7, 6, 5 ou qualquer outro valor abaixo ou igual a 10, dependendo de quantas repetições ocorrer. Testa ele várias vezes e verá que nem sempre são 7 elementos que são criados.

A solução é você incrementar a variável numero somente quando não for encontrado número já sorteado em segredos e esse número for inserido no array. Para isso, é simples. Dá uma olhada no trecho de código abaixo:

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

Percebeu a diferença? Faz sentido pra você?

Aqui vemos que o uso do while é mais indicado neste caso que o uso do for pois podemos controlar exatamente onde queremos incrementar a variável de controle.

Abraços e sucesso nos estudos!

Olá Eduardo! Sua dúvida foi solucionada? Se sim, marca o tópico como solucionado, assim você ajuda outros colegas com a mesma dúvida.

Abraços!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software