2
respostas

Não consigo identificar o erro !!!! (Zero continua sendo acrescentado)

<meta charset="UTF-8">

<input />
<button>Check if you are correct.</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;

            if (numeroAleatorio !== 0) {

                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(3);

    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("ACERTOU!");
                achou = true;
                break;

        }
    }
                        if (achou == false){

                            alert("ERROU!");
                            input.value = " ";
                            input.focus()
                        }

    }


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

    button.onclick = verifica

</script>
2 respostas

Fala, João Vitor! Tudo bem contigo?

O problema está ocorrendo dentro desta condição

            if (numeroAleatorio !== 0) {

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

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

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

Quando fechou a terceira chave acabou a condicional comparando se o (numeroAleatorio !== 0).

Basta retirar a terceira chave e colocá-la após a condicional de compara se (achou == false).

Essa parte ficará dessa forma:

        while (numero <= quantidade) {

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

            if (numeroAleatorio !== 0) {

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

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

                    }
                }

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

Desta forma o if (achou == false)ficará dentro do comparativo if (numeroAleatorio !== 0)

Resolvido o aparecimento do zero ;-)

Espero ter ajudado, João Vitor!

Um abraço e bons estudos!!!

Olá João Vitor, tudo bem com você?

A questão é onde você colocou o if para verificar onde iremos adicionar, vou simular a execução do seu programa para que a gente possa entender corretamente o erro, ok?

Vamos supor que sorteia() deu 0, então:

    while(numero <= quantidade){
            var numeroAleatorio = sorteia();
            var achou = false;

Aqui teremos que numeroAleatorio = 0 e achou = false, então iremos para a verificação do if:

if (numeroAleatorio !== 0) {

Como isso é falso, não iremos entrar, e ai vem o problema, qual a próxima instrução depois do if ?

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

Opa, achou começou como falso, e como não entramos no if ele se manteve, então iremos adicionar o nosso numeroAleatorio, que no caso é o 0 :)

Para corrigir esse problema é bem simples, a verificação de se encontrou o número tem que estar dentro do bloco onde o numeroAleatorio é != 0, no caso:


            if (numeroAleatorio !== 0) {

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

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

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

Dessa forma se sortearmos 0, não iremos entrar dentro do if e simplesmente sortear um novo valor :)

Conseguiu Compreender? Qualquer coisa estou à disposição :)

Abraços e Bons Estudos!

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