3
respostas

Meu programa não funcionou em outro celular

Eu fiz o exercício e decidi testar como seria propor três tentativas para acertar o número pensado. Tudo funcionando bonitinho no meu computador (usando Chrome) e no meu celular (usando o navegador direto do WhatsApp), mas um amigo testou e ele recebeu a seguinte mensagem: "Ops, o número pensado é menor que 0."... Eu fui incapaz de reproduzir essa mensagem em relação ao zero. Alguma ideia de como isso pode ter acontecido?

Aqui está o meu código:

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

    function pulaLinha() {
        document.write("<br><br>");
    }

    function mostra(frase) {
        document.write("<big>" + frase + "</big>");
        pulaLinha();
    }

    function sorteia(n) {
        return Math.round(Math.random() * n + 1);
    }

    var numeroPensado = sorteia(10)
    console.log(numeroPensado);
    var chute = parseInt(prompt("Qual número de 1 a 10 estou pensando? Digite seu chute!"))

    if(numeroPensado > chute) {
        var pista = "maior"
    }    else {
            var pista = "menor"
        }

    if(chute == numeroPensado){
        alert("Parabéns, você acertou o número pensado!");
        mostra("Você venceu!")
    }    else {
            alert("Ops, o número pensado é " + pista + " do que " + chute + ".")
            var chute = parseInt(prompt("Segunda chance! Qual número de 1 a 10 estou pensando? Digite seu chute!"))
                if(chute == numeroPensado){
                    alert("Parabéns, você acertou o número pensado na segunda tentativa!")
                    mostra("Você venceu!")
                }     else {
                        alert("Ops, o número pensado é " + pista + " do que " + chute + ".")
                        var chute = parseInt(prompt("Última chance! Qual número de 1 a 10 estou pensando? Digite seu chute!"))
                            if(chute == numeroPensado){
                                alert("Parabéns, você acertou o número pensado na última tentativa!")
                                mostra("Você venceu!")
                            }    else {
                                    alert("Ops, sinto muito! O número pensado era " + pista + " do que " + chute + ".")
                                    mostra("Fim do jogo, você perdeu! :(")
                                }
                    }
        }


</script>
3 respostas

Fala, Tales! Tudo bem contigo?

O que aconteceu é que quando você criou um if com a condicional "maior" e "menor" ele já guarda esse resultado e quando entra na sequência de condicionais logo abaixo já não há como ele voltar atrás e verificar se é "maior" ou "menor" novamente. Veja abaixo:

Ah! Antes de mais nada, abra o navegador e aperte o F12 para vermos qual número será sorteado no console ;-)

Vamos supor que o número sorteado seja 8.

    function sorteia(n) {
        return Math.round(Math.random() * n + 1);
    }

    var numeroPensado = sorteia(10)
    console.log(numeroPensado);
    var chute = parseInt(prompt("Qual número de 1 a 10 estou pensando? Digite seu chute!"))

Vamos digitar um número maior que o número sorteado, por exemplo o número 9. Agora ele vai entrar no "if" e verificar se o numeroPensadoé "maior" ou "menor" que o chute. Logo, já guardou que meu número foi maior do que o dele

    if (numeroPensado > chute) {
        var pista = "maior"
    } else {
        var pista = "menor"
    }

Feito isso ele terá uma sequencia de condicionais e já no primeiro ele passa direto por não ter acertado, correto? Mas vamos para a outra condição

    if (chute == numeroPensado) {
        alert("Parabéns, você acertou o número pensado!");
        mostra("Você venceu!")
    } else {

Nesta ele vai me mostrar que o número sorteado foi menor que o número do chute e me jogará direto para a próxima condicional (lembre que ele já guardou que meu chute foi maior.)

        alert("Ops, o número pensado é " + pista + " do que " + chute + ".")
        var chute = parseInt(prompt("Segunda chance! Qual número de 1 a 10 estou pensando? Digite seu chute!"))
        if (chute == numeroPensado) {
            alert("Parabéns, você acertou o número pensado na segunda tentativa!")
            mostra("Você venceu!")
        } else {

No próximo já podemos mostrar o erro que apareceu para teu amigo. Se digitarmos 0 nessa segunda tentativa ele vai mostrar "Ops, o número pensado é menor que 0.", porque, antes dele começar de novo o jogo, já guardou que o número que digitei primeiro foi maior que o número sorteado.

Agora o desafio é, como vou fazer com que, todas as vezes em que for digitar o chute ele retorne uma nova análise se é "maior" ou "menor".

Tente esse desafio!

Se travar, volte aqui para podermos ajudar, Tales!

Bons estudos e vamos em frente!!!

Obrigado pela resposta, Cássio! Quando tu diz "quando você criou um if com a condicional "maior" e "menor" ele já guarda esse resultado e quando entra na sequência de condicionais logo abaixo já não há como ele voltar atrás e verificar se é "maior" ou "menor" novamente", isso se aplica apenas a dentro de um if/else ou a todo o código?

Por exemplo, se me é importante que uma variável varie (haha!) e seja avaliada diversas vezes ao longo do código, ele consegue ler as mudanças da variável se elas não forem dentro de um if/else?

Com relação ao desafio ("Agora o desafio é, como vou fazer com que, todas as vezes em que for digitar o chute ele retorne uma nova análise se é "maior" ou "menor"."), o que eu havia feito inicialmente era gerar uma variável diferente para cada chute (chute1, chute2, chute3 etc.). Eu deixei de lado essa estratégia porque estava fazendo um código monstruosamente grande para uma questão que me pareceu simples, aí simplifiquei desta forma (infelizmente o único registro da versão anterior que eu estava fazendo existe em foto). Como são variáveis novas, o programa as testaria individualmente e esse problema não ocorreria, certo?

Opa, Tales!

Quanto ao if sim! Vai ter consequência nos demais ifs. Por exemplo:

Ele pega seu número (vamos supor 3 e o número sorteado foi 2) e diz "Ok, este chute é menor que o número pensado" e fica com isso na cabeça (rs).

Ele vai dizer p/ usuário o que ele comparou. Certinho!

Agora ele parte p/ o segundo chute (vamos dizer que coloquei 1) e vai "lembrar":"Ah! No começo o número era menor! Beleza", e vai imprimir p/ usuário a mesma mensagem, porque ele não comparou novamente se o novo chute foi menor ou maior. Ele simplesmente pegou a informação do primeiro. A mesma situação se aplica p/ terceiro e último.

O que eu aconselharia: faça esse teste desenvolvendo o código inicial que você começou, mesmo que ele fique grande. O importante nesse momento é achar uma solução para que ele rode perfeitamente porque logo mais no curso você vai entrar em conceitos de for e while que vai te ajudar e muito nesse exercício que está fazendo. Verá que tudo isso que vai escrever pode ser facilitado demais. Mas aí você pergunta: "Então porque vou complicar?" O que importa agora é fixar e como isso está funcionando, na maneira mais simples que possa ser, mas com certeza seus conhecimentos vão chegar mais consolidados lá na frente! ;-)

Tente essa sua opção de criar as variáveis para cada chute e depois retorne aqui para discutirmos mais, Tales!!!

Fico no aguardo!

Um abraço, amigão!