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

break;

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

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

                     alert("Você ACERTOU!");
                     achou = true;
                     break;
              } 
       }

Copiei e colei o código do professor, porém a função break não está funcionando da forma que eu penso que deveria. Ao invés de parar o loop e gerar um novo número aparece o alert e continua me dando chances para acertar o número. Caso eu digite os números certos (consigo ver pelo console) minhas chances nunca acabam. O break não deveria parar a função?

9 respostas

Olá Jhemili!

O break está parando a função sim mas se você tiver um laço do lado de fora desse que faz ele ser executado mais de uma vez você pode criar uma variavel chamada de "chances" com um valor fixo no começo do programa, por exemplo, 3.

Toda vez que você erra essa variavel é decrementada, quando ela chegar no 0 o jogo acaba.

Espero que tenha te ajudado!

Qualquer coisa me envia o código completo aqui pra eu dar uma olhada por favor!

Olá Guilherme, obrigada pelo retorno. Então, na minha cabeça eu deveria criar essa variável chances e coloca-la dentro de um loop onde seria repetido as tentativas até atingir o máximo permitido, porém estou com dificuldade de encontrar onde coloca-la hahahah. Minhas tentativas resultaram em loop infinito, ou em não encerrar as tentativas. O código abaixo é do programa todo, vc poderia me ajudar a determinar essa variável? Se vc preferir não me dar a resposta já de cara, você pode me descrever a lógica e eu tento de novo. Seria até legal pra eu treinar.

<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;

              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);
/*/PENSEI EM INICIAR UM WHILE COM A VAR TENTATIVA AQUI P ELE VERIFICAR 3 VEZES/*/
    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>

Oi Jhemili tudo bem?

Se você quer sair de uma função javascript use o comando

return false;

Sai na hora da função que está. Muito mais simples.

Espero ter ajudado!!!

Olá André, eu coloquei o comando que vc falou logo após o if para respostas certas, porém o programa continua aceitando entradas do usuário. Se eu coloco fora do if ele ignora as condições para respostas erradas e trava. Eu gostaria que o usuário tivesse 3 chances e após isso o programe pare para gerar um novo segredo.

solução!

Fiz as alterações como solicitado!!!

Dá uma olhadinha:

<meta charset="UTF-8">

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

<script>

    var chances = 0;
    function sorteia() {

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

    }

    function sorteiaNumeros(quantidade) {

        var segredos = [];
        chances=0;
        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++;
                }
            }

        }
        console.log(segredos);
        return segredos;

    }

    var segredos = sorteiaNumeros(3);


    /*/PENSEI EM INICIAR UM WHILE COM A VAR TENTATIVA AQUI P ELE VERIFICAR 3 VEZES/*/
    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!");
                alert("Resorteando números");
                segredos = sorteiaNumeros(3);
                achou = true;
                break;
            }
        }

        if (achou == false) {
            chances++;
            alert("Você ERROU!Chances " + chances + " de 3.");


            if (chances >= 3) {
                alert("Chances esgostadas, resorteando números");
                segredos = sorteiaNumeros(3);
            }
        }

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

    }

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

    button.onclick = verifica;

</script>

Espero ter ajudado!!!

Olá Jhemili,

Seu código está um pouco confuso, nele você está não está carregando o array de segredos.

Tem duas funções fazendo a verificação do número sorteado.

Dei uma reformulado no seu código.

Análise o código que reformulei e vê se te ajuda a entender a lógica deste algorítimo .

<meta charset="UTF-8">

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

<script>

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

    // Função que sorteia o número
    function sorteia() {

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

    // Função que carrega o array segresdos com os números sorteados
    function sorteiaNumeros(quantidade) {

        var segredos = [];

        while (segredos.length < quantidade) {

            var numeroAleatorio = sorteia();
            console.log(numeroAleatorio);

            if (numeroAleatorio != 0) {
                segredos.push(numeroAleatorio);
            }
        }

        return segredos;
    }

    var segredos = sorteiaNumeros(3);
    console.log(segredos);


    // Verifica se o número escolhido está na lista de números sorteados
    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>

Qualquer dúvida estou a disposição.

Olá Ricardo, obrigada por responder. A parte do código que você simplificou é a que impede de gerar dois segredos iguais. Seu código é mais simples de entender, mas ele gera segredos duplicados.

André, funcionou muito bem o código. Valeu mesmo. Espero um dia conseguir pensar em algo assim sozinha hahahah.

Obrigada a todos!

Disponha Jhemili, pensar assim é prática. Sugiro praticar , praticar e praticar rsrsrs. Bons estudos!!!

Olá Jhemili,

Sei que o tópico já foi solucionado, mas também gosto de praticar.

Segue implementação da função que gera os números sem que eles se repitam.

<meta charset="UTF-8">

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

<script>

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

    // Função que sorteia o número
    function sorteia() {

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

    // Função que carrega o array segresdos com os números sorteados
    function sorteiaNumeros(quantidade) {

        var segredos = [];

        // gerar o array segredos com os números sorteados
        while (segredos.length < quantidade) {
            // gera um número aleatório
            var numeroAleatorio = sorteia();

            // verifica se o número gerado é diferente de zero
            if (numeroAleatorio != 0) {
                // verifica se adiciona o número
                var adiciona = true;
                for (var count = 0; count < segredos.length; count++) {

                    if (numeroAleatorio == segredos[count]) {
                        adiciona = false;
                    }
                }
                // adiciona novo número
                if (adiciona == true) {
                    segredos.push(numeroAleatorio);
                }
            }
        }

        return segredos;
    }

    var segredos = sorteiaNumeros(3);
    console.log(segredos);


    // Verifica se o número escolhido está na lista de números sorteados
    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>