2
respostas

Está acontecendo magia!

Senhoras e senhores, estava bem feliz fazendo o código. Fui testando passo a passo, tudo perfeito. No último teste, em que eu ia finalizar tudo, deu um erro.

meu código: alert('Bem vindo ao jogo do número secreto') let numeroSecreto = 5; console.log(numeroSecreto); let chute; let tentativas = 1;

//enquanto o chute não for igual ao número secretro while (chute != numeroSecreto) { chute = prompt('Escolha um número entre 1 e 10'); //se chute for igual ao número secreto if (chute == numeroSecreto) { alert(Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} tentativas); } else { if (chute > numeroSecreto) { alert(o número secreto é menor que ${chute}); } else { alert(o número secreto é maior que ${chute}); } // tentativas = tentativas + 1; tentativas++; } }

O erro: (número secreto era 5). Qunado eu fazia os testes entre 1 a 4, tudo normal, "o numero secreto é maior que o chute". O problema é quando eu digitava algo maior que 5, aparecia a mensagem "Isso ai! Você descobriu...". Verifiquei várias vezes, meu código estava igual ao do vídeo. Então tive a ideia de mudar " if (chute == numeroSecreto) {" por "if (chute === numeroSecreto) {", talvez faltasse exatidão. Funcionou mais ou menos. Fazia duas ou uma tentativa e aparecia assim: imagem da página html do jogo secreto com o alert "isso ai! voce descobriu o número secreto 5 com 2904 tentativas"achei até engraçado, tentei mais uma vez e passou das 40 mil tentativas e meu computador ficou exigindo mais do processador (dava pra ouvir a ventoinha do coitado chorar haha). apaguei os "===" daquela linha, coloquei novamente apenas "==". dei F5 na página. E foi, normal. Foi perfeito, tudo certo. Não sei explicar o que houve. Eu já tinha dado F5 várias vezes, tinha salvo várias vezes, antes e depois da alteração do "==".

Alguém consegue ter alguma ideia do que aconteceu? Fiquei curioso, mas gosto de acreditar em magia dentro da programação haha :)

Abraços, Nicolas

2 respostas

Vou colocar a imagem do meu código, acho que fica melhor de visualizar

alert('Bem vindo ao jogo do número secreto')
let numeroSecreto = 5;
console.log(numeroSecreto);
let chute;
let tentativas = 1;

//enquanto o chute não for igual ao número secretro
while (chute != numeroSecreto) {
    chute = prompt('Escolha um número entre 1 e 10');
    //se chute for igual ao número secreto
    if (chute == numeroSecreto) {
        alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} tentativas`);
    } else {
        if (chute > numeroSecreto) {
            alert(`o número secreto é menor que ${chute}`);
        } else {
            alert(`o número secreto é maior que ${chute}`);
        }
        // tentativas = tentativas + 1;
        tentativas++;
    }
}

alert('Bem vindo ao jogo do número secreto') let numeroSecreto = 5; console.log(numeroSecreto); let chute; let tentativas = 1;

//enquanto o chute não for igual ao número secretro while (chute != numeroSecreto) { chute = prompt('Escolha um número entre 1 e 10'); //se chute for igual ao número secreto if (chute == numeroSecreto) { alert(Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} tentativas); } else { if (chute > numeroSecreto) { alert(o número secreto é menor que ${chute}); } else { alert(o número secreto é maior que ${chute}); } // tentativas = tentativas + 1; tentativas++; } }

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi, Nicolas! Tudo bem?

Sobre sua dúvida, o que provavelmente aconteceu é que a variável chute estava sendo tratada como uma string por conta da função prompt(), que sempre retorna um valor do tipo string, mesmo quando você digita um número. Isso pode ter causado o comportamento inesperado durante a comparação com numeroSecreto, que é um número.

Quando você usou ==, o JavaScript fez uma conversão implícita entre os tipos de dados (string e número), o que pode ter gerado resultados inesperados. Ao usar ===, você forçou a comparação estrita, que não converte os tipos, mas ainda assim a solução com == funcionou, provavelmente porque o valor de chute estava sendo comparado como uma string que representava o número.

A solução ideal aqui seria garantir que o valor de chute seja convertido para número antes de compará-lo com numeroSecreto. Isso pode ser feito usando a função parseInt() ou Number().

Aqui está o ajuste no seu código:

alert('Bem vindo ao jogo do número secreto');
let numeroSecreto = 5;
console.log(numeroSecreto);
let chute;
let tentativas = 1;

// enquanto o chute não for igual ao número secreto
while (chute != numeroSecreto) {
    chute = parseInt(prompt('Escolha um número entre 1 e 10')); // converte chute para número
    // se chute for igual ao número secreto
    if (chute === numeroSecreto) { // comparação estrita
        alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} tentativas`);
    } else {
        if (chute > numeroSecreto) {
            alert(`O número secreto é menor que ${chute}`);
        } else {
            alert(`O número secreto é maior que ${chute}`);
        }
        tentativas++;
    }
}

Isso deve corrigir o problema de comparação e evitar qualquer comportamento estranho no jogo.

Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.