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

Ajuda pra fazer o código funcionar como eu pretendo

Meu objetivo era fazer com que caso desse errado o chute, aparecesse um alert dizendo que estava errado e pra tentar de novo, aí aparecer outra janela do prompt pra colocar novamente o chute. Queria colocar 3 tentativas, mas no meu código, caso a pessoa erre, abre o alert e o prompt para o próximo chute certinho, só que após colocar o segundo chute ele não faz mas nada! Fiquei uma meia hora aqui quebrando a cabeça pra tentar fazer rodar, e sinto que talvez eu deva usar o FOR pra dar certo, mas não tenho certeza. Alguém poderia me ajudar? Obrigado

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {

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

    var numeroPensado = sorteia(10);


     var chute = parseInt(prompt("Já pensei. Qual você acha que é?"));
     var tentativaAtual = 1
     var maxTentativas = 3

    if(chute == numeroPensado) {

        mostra("Uau! Você acertou, pois eu pensei no " + numeroPensado);
    } else {

        if(chute > numeroPensado && TentativaAtual <= maxTentativas) {

            alert("Você errou! Seu chute é maior que o número pensado! Tente novamente.");
            tentativaAtual++
            parseInt(prompt("Já pensei. Qual você acha que é?"))
        } else {

            alert("Você errou! Seu chute é menor que o número pensado! Tente novamente.");
            tentativaAtual++
            parseInt(prompt("Já pensei. Qual você acha que é?"))
        }

    }
</script>
10 respostas

CONSEGUI!!!

Oloco, Josias! Você mandou muito bem! É muita emoção! Não é mesmo, meu aluno?? AGUENTA CORAÇÃO! hahahaha

Só tem um pequeno detalhe que eu gostaria de te ajudar a resolver! Se o usuário acertar o número pensado logo no primeiro chute, o que acontece?

me emocionei tanto, mas tanto, que não conferi o que acontecia quando acertava! Acabei de fazer o teste com a resposta correta, e realmente, fica travado no prompt até eu ir pro numero máximo de tentativas erradas, aí então ele imprime

Uau! Você acertou, pois eu pensei no 1

O número que eu havia pensado era 1

Vou trabalhar pra consertar isso agora, quando achar uma solução posto de novo. Se não conseguir eu peço ajuda aqui novamente, obrigado por me responder <3

Por nada, Josias! Qualquer coisa se vc se perder nas trevas é só comentar aqui que eu apareço novamente para te dar uma ajuda e levá-lo pra luz do conhecimento!

Grande abraço e bons estudos aí, meu aluno!

Fritei o que tinha pra fritar aqui :x Tentei colocar uma variável de máximo de tentativas pra ver se ficava do jeito que eu gostaria, mas não rolou! Por favor, me ajuda a entender o que eu tenho que fazer pra ele parar de pedir após dar entrada no numero correto, e aí ele imprimir na tela apenas o

Uau! Você acertou, pois eu pensei no + numeroPensado

Obrigado professor!

AGORA FOI!

Eu tinha iniciado o video 15 da aula 7, e aí o professor deu a ideia de melhorar nosso código do jogo, e aí eu quis pegar o que eu tinha feito e tentar fazer sozinho e colocar as modificações do numero de chances! Acabei de dar continuidade no vídeo e descobri a tal função BREAK, e agora sim consegui definitivamente deixar do jeito que eu gostaria!!!!!

Já fiz o teste, tanto errando como acertando, e agora só imprime uma das frases!

To felizzzzzzzzz hahaa

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {

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

    var numeroPensado = sorteia(10);


    var tentativaAtual = 1

    while(tentativaAtual <= 3){


        var chute = parseInt(prompt("Já pensei. Qual você acha que é?"));

        if(chute == numeroPensado) {

        mostra("Uau! Você acertou, pois eu pensei no " + numeroPensado);
        break;

        } else {

        if(chute > numeroPensado) {

            alert("Você errou! Seu chute é maior que o número pensado! Tente novamente.");
            tentativaAtual++;

        } else {

            alert("Você errou! Seu chute é menor que o número pensado! Tente novamente.");
            tentativaAtual++;

        }

        }

    }

    if(tentativaAtual = 3 && chute != numeroPensado) {

        alert("Máximo tentativas :(") ;
        mostra("O número que eu havia pensado era " + numeroPensado);

    }

</script>
solução!

Aê, Josias! É isso aí! Agora sim! Seu código está totalmente correto agora!

Mas eu pretendo aqui te levar ainda mais para a luz do conhecimento!

Desafio: Há uma forma de resolver esse mesmo problema sem utilizar o break! Vc consegue chegar nessa solução? Utilize esse exercício como forma de exercitar ainda mais a lógica de progrmação que é justamente o tema desse curso!

Novamente, precisando de alguma ajuda é só falar!

Grande abraço e bons estudos, meu aluno!

Olá Josias.

Além da sugestão de ir além dada pelo Gabriel, se você me permitir, gostaria apenas que olhasse com mais atenção pro seu if/else. Considerando que nessa estrutura você executa uma coisa OU outra, faz sentido eu ter a mesma instrução nas duas? Se eu preciso que algo seja feito em quaisquer circunstâncias, preciso deixar dentro dessas instruções?

Enfim, é apenas uma dica pra te ajudar a enxugar o seu código e deixar ele mais limpo e conciso.

[]'s.

Prof. Gabriel, consegui deixar do mesmo jeito, sem usar o break, mas não tenho certeza que é a saída que você penso.

Eu troquei o BREAK, por um número de tentativas maior do que o máximo. no caso, pus:

tentativaAtual = tentativaAtual + 4

Deu o mesmo resultado no programa. Era essa a solução?

E outra coisa, Sobre a sugestão do bruno. Não tenho certeza se eu entendi, mas acho que ele se referia à essa parte do código


        if(chute > numeroPensado) {

            alert("Você errou! Seu chute é maior que o número pensado! Tente novamente.");
            tentativaAtual++;

        } else {

            alert("Você errou! Seu chute é menor que o número pensado! Tente novamente.");
            tentativaAtual++;

        }

Pois já há um ELSE acima disso, que é pra quando o chute não for o número correto. Então no caso, pelo que eu consigo conceber sobre lógica até agora, minha ideia era colocar uma mensagem dizendo se o errado era maior ou menor do que o número pensado. Aí pra solucionar isso eu coloquei, após o ELSE do número correto um IF pro caso do numero ser maior gerar a mensagem dizendo isso e mais um ELSE pro caso dele ser menor.

Confesso que "esteticamente falando" o código não está bonito, não está limpo.

Mas a única mudança que eu consegui pensar, seria trocando o segundo ELSE do código por um IF.

Fiz o teste aqui, e deu certo. Mas não tenho certeza se era isso que o Bruno havia sugerido. Caso não seja, poderia me ajudar a entender como deixar o código funcionando do mesmo jeito, porém mais limpo?

Obrigado.

O código final, ficou assim

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {

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

    var numeroPensado = sorteia(4);


    var tentativaAtual = 1

    while(tentativaAtual <= 3){


        var chute = parseInt(prompt("Já pensei. Qual você acha que é?"));

        if(chute == numeroPensado) {

        mostra("Uau! Você acertou, pois eu pensei no " + numeroPensado);
        tentativaAtual = tentativaAtual + 4;

        } else {

        if(chute > numeroPensado) {

            alert("Você errou! Seu chute é maior que o número pensado! Tente novamente.");
            tentativaAtual++;

        } 
        if (chute < numeroPensado) {

            alert("Você errou! Seu chute é menor que o número pensado! Tente novamente.");
            tentativaAtual++;

        }

        }

    }

    if(tentativaAtual = 3 && chute != numeroPensado) {

        alert("Máximo tentativas :(") ;
        mostra("O número que eu havia pensado era " + numeroPensado);

    }

</script>

Muito bem, Bruno! Vc conseguiu tirar o break como eu sugeri! Contudo, ao resolver um problema vc caiu em outro! O que é muito comum no mundo da programação!

Veja que se a quantidade máxima de tentativas passar de 3 para 10, a forma que vc utilizou para substituir o break (tentativaAtual = tentativaAtual + 4), não irá funcionar caso o usuário acerte seu chute logo nas primeiras tentativas!

Outra coisa - Parte 1: Veja que vc não precisaria fazer tentativaAtual = tentativaAtual + 4! Bastaria fazer tentativaAtual = tentativaAtual + 3! Porque 3 é a quantidade máxima de tentativas e o seu contador de tentativas já começa em 1! Ou seja, na realidade, com a quantidade de tentativas começando sempre em 1, bastaria somar um valor k à variável tentativaAtual, onde k é o número máximo de tentativas!

Outra coisa - Parte 2: Além disso, perceba que no momento que vc quiser trocar a quantidade máxima de tentativas do usuário, vc terá que mudar na condição do while e também na expressão que vc utilizou para substituir o break! E isso é ruim pois como programador vc teria que lembrar todos os lugares para sair trocando valores apenas pq agora quer que o usuário tenha uma quantidade diferente de tentativas!

Vc consegue resolver essas situações? Resolvendo elas automaticamente vc estará caminhando no sentido de deixar seu código mais bonito!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

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