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

2 erros: 0 continua aparecendo no array; alert não aparece após acertar um número

Primeiro erro: quando a array da variável segredos vai ser preenchida por números aleatórios, o código me parece correto, mas ainda assim o 0 continua aparecendo no console.

function sorteiaNumeros(quantidade) {

        var segredos = [];

        var numero = 1;
        while(numero <= quantidade) {

            var numeroAleatorio = sorteia();

            if(numeroAleatorio !== 0) {

                var achou = false;

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

                    if(segredos[posicao] == numeroAleatorio) {

                        achou = true;
                        break;
                    }
                }

                if(achou == false) {

                    segredos.push(sorteia());
                    numero++;
                }
            }    
        }

        return segredos;
    }

Segundo erro: depois que acerto um dos chutes, os popups de ter errado outros chutes deixam de aparecer. Eu assisti o vídeo completo esperando que esse problema fosse abordado, mas o professor sempre mostra no vídeo somente até acertar um número.

Esse é o código completo:

<meta charset="UTF-8">
<body style="background-color: black; color: white;"> 

<input/>
<button>Compare com o número que estou pensando!</button>


<script>
    function sorteia() {

        return Math.round(Math.random() * 10);
    }

    function sorteiaNumeros(quantidade) {

        var segredos = [];

        var numero = 1;
        while(numero <= quantidade) {

            var numeroAleatorio = sorteia();

            if(numeroAleatorio !== 0) {

                var achou = false;

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

                    if(segredos[posicao] == numeroAleatorio) {

                        achou = true;
                        break;
                    }
                }

                if(achou == false) {

                    segredos.push(sorteia());
                    numero++;
                }
            }    
        }

        return segredos;
    }

     var segredos = sorteiaNumeros(3);

     console.log(segredos);

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

    var achou = false;

    function verifica() {

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

            if(input.value == segredos[posicao]) {

                alert("Parabéns! Você acertou o número secreto");
                achou = true;
                break;
            }
        }

    if(achou == false) {

        alert("Você errou!");
    }

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

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

    button.onclick = verifica;

</script>
</body>
4 respostas

E aí, Marta, tudo bem?

Não entendi o que quis dizer com "mas ainda assim o 0 continua aparecendo no console". Executando seu programa, o que aparece no console é o array de segredos com 3 valores.

Sobre o segundo erro, é algo simples, a posição do var achou = false;. O ideal seria colocar no início da função verifica(), pois na situação atual do seu código, uma vez que o usuário acertar o segredo e a função definir achou = true, o valor nunca volta a ser false para entrar no if que alerta o erro do usuário.

Olá, estou bem, e você? :)

Então, desses 3 números que são colocados no array, o zero não deveria estar nesse sorteio. Deveria ser somente entre 1 e 10. Eu fiz o código conforme instruído, mas ainda assim o 0 aparece. Eu não consegui encontrar o erro pra corrigir.

Muito obrigada pela resposta, btw. Vou corrigir isso também.

solução!

Aaaaah, desculpe agora eu entendi. No finalzinho da sua function sorteiaNumeros(quantidade), na etapa que você popula o array, você está chamando a função sorteia() de novo ao invés de usar a variável var numeroAleatorio = sorteia();, por isso, apesar de você ter feito a validação inicial para excluir zero, na hora de preencher o array você corre o risco de gerar o 0 novamente. Então minha recomendação seria alterar o finalzinho e deixar assim:

segredos.push(numeroAleatorio);

Muito obrigada! sz