Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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!