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

alert só mostra que "Acertou"

veja o bloco de código abaixo do mesmo exercício

function verifica() {

                for(var sorte = 0; sorte < nSorteados.length; sorte++) {
                    if(numeroDigitado.value == nSorteados[sorte]) {
                        achou = true;
                        break;
                    }
                }

                if (achou == true) {
                    alert("Parabéns, você acertou!");
                } else {
                    alert("infelizmente você não ganhou!");
                }

            }

estando desta forma assim que o usuário digira no campo de imput e chama a função no click do botão, se caso ele acertar vai mostrar a mensagem: alert("Parabéns, você acertou!"); Agora se o usuário digitar qualquer outro número mesmo que errado vai continuar mostrando o mesmo alert("Parabéns, você acertou!");

Pensando nisso inserir o valor de "false" na variável "achou" depois do if dentro do loop para que se caso o usuário quisesse tentar de novo a variável pode agora voltar pro seu valor inicial de "false". Veja abaixo:

function verifica() {

                for(var sorte = 0; sorte < nSorteados.length; sorte++) {
                    if(numeroDigitado.value == nSorteados[sorte]) {
                        achou = true;
                        break;
                    }
                    achou = false;
                }

                if (achou == true) {
                    alert("Parabéns, você acertou!");
                } else {
                    alert("infelizmente você não ganhou!");
                }

            }

Alguém teve o mesmo problema e chegou a um resultado diferente?

10 respostas

O problema no seu código não esta nesse trecho de código que funciona corretamente. Ele esta antes, no processo de captura do input.

Por exemplo, usando este mesmo código, mas sem levar em consideração input.value porque você não postou a parte do seu código que trata isso, ele sai como esperado (código extraído do capítulo):

var segredos = [16, 34, 37, 42, 50, 58];
var chute = 16;

function verifica() {

    var achou = false;

    for(var i = 0; i < segredos.length; i = i + 1) {
        if(segredos[i] == chute) {
            achou = true;
            break;
        }
    }

    if(achou == true) {
        alert("Parabéns! Você acertou um dos números secretos");
    }
    else {
        alert("Infelizmente você errou!");
    }
}

verifica()

Se você mudar para 7, exibirá apenas uma vez a mensagem de erro.

Poste seu código completo.

Na verdade, eu código tem problema sim, você não inicializou a variável achou com false antes do bloco do for como eu fiz no exemplo anterior. Se você não inicializar sempre com false, quando você encontrar a primeira vez ela ficará true, e se você não achar o elemento, ela continuará true e dará o falso positivo.

function verifica() {

                // FALTOU AQUI
                 var achou = false;

                for(var sorte = 0; sorte < nSorteados.length; sorte++) {
                    if(numeroDigitado.value == nSorteados[sorte]) {
                        achou = true;
                        break;
                    }
                }

                if (achou == true) {
                    alert("Parabéns, você acertou!");
                } else {
                    alert("infelizmente você não ganhou!");
                }

            }

Qual exercício você esta se referindo, pois seu post foi relacionado a explicação do capítulo e lá o código inicializa corretamente a variável.

No aguardo.

É mais bonito inicializar a variável com false antes, porque como você vai iniciar a procura, você não sabe se existe ou não, por isso ela começa com false a cada procura. Fica mais claro do que ficar fazendo várias vezes dentro do loop achou = false.

Obrigado professor por esclarecer o código, fiz dessa forma agora:

<script>
            var nSorteados = [15, 26, 38, 40, 42, 55];
            var numeroDigitado = document.querySelector("#inserir");
            var botaoSortear = document.querySelector("#botaoS");

            var achou = false;
            function verifica() {

                for(var sorte = 0; sorte < nSorteados.length; sorte++) {
                    if(numeroDigitado.value == nSorteados[sorte]) {
                        achou = true;
                        break;
                    }
                    achou = false; //Se eu não colocar false nessa variavel ele continua mostrando que ele acertou mesmo digitando um numero errado.
                }

                if (achou == true) {
                    alert("Parabéns, você acertou!");
                } else {
                    alert("infelizmente você não ganhou!");
                }

            }

            botaoSortear.onclick = verifica;

Se eu não colocar false nessa variável "achou ele continua mostrando que ele acertou mesmo digitando um numero que não está no array. :-(

solução!

Para funcionar, você tem que declarar var achou = false quando for verificar . Essa verificação é feita quando o usuário clica no botão e, quando ele clica, a função verifica é chamada. É dentro dela que você precisa fazer var achou = false. Pegou a ideia?

Alterando seu código:

<script>
            var nSorteados = [15, 26, 38, 40, 42, 55];
            var numeroDigitado = document.querySelector("#inserir");
            var botaoSortear = document.querySelector("#botaoS");

            function verifica() {

                  var achou = false;

                 for(var sorte = 0; sorte < nSorteados.length; sorte++) {
                    if(numeroDigitado.value == nSorteados[sorte]) {
                        achou = true;
                        break;
                    }
                }

                if (achou == true) {
                    alert("Parabéns, você acertou!");
                } else {
                    alert("infelizmente você não ganhou!");
                }

            }

            botaoSortear.onclick = verifica;
</script>

Toda vez que verifica() for chamado pelo clique do botão, você começa assumindo que não encontrou o número var achou = false (e não encontrou mesmo, porque o loop nem foi chamado ainda). Fica mais claro para quem lê seu código.

O que não esta claro para mim é que no seu post você disse que o código estava errado, mas olhando a explicação do capítulo ele esta certo. Você esta se referindo a qual exercício?

Tem razão professor, seguindo essa lógica faz sentido a variável achou dentro da função mesmo! Muito obrigado pela ajuda! =D

Qual exercício você estava se referindo? Porque não achei o código com problema.

Está no primeiro video "01 Armazenando muitos dados" da aula 9 na Transcrição. O código lá está assim:

function verifica() {

    var achou = false;

    for(var i = 0; i < segredos.length; i = i + 1) {
        if(segredos[i] == input.value) {
            achou = true;
            break;
        }
}

    if(achou == true) {
        alert("Parabéns! Você acertou um dos números secretos");
    }
    else {
        alert("Infelizmente você errou!");
    }
}

lá a variável achou está fora do loop professor!

Mas esta certo! É fora do loop mesmo e dentro de verifica. Veja a solução alterada do seu código, ela esta fora do loop e dentro do verifica.

Bom, estou mais tranquilo, pois não havia erro na explicação do capítulo. Mas de qualquer maneira, obrigado por ter tido interesse em tentar avisar que há problema no código.