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

O loop está rodando uma vez a mais que o necessário

Olá, pessoal! A mensagem para que a pessoa possa fazer o chute aparece uma quarta vez, quando deveria aparecer apenas 3 vezes. O que posso fazer para melhorar o código? Não consigo achar o erro :C

<meta charset="UTF-8">

<script>

    function sorteia()
        {
            var numeroPensado = Math.round(Math.random()*10);
            console.log(numeroPensado);

            return numeroPensado;
        }

    var chute = parseInt(prompt ("Digite aqui o seu chute de número inteiro entre 0 e 10!"));
    var random = sorteia();
    var contador = 1;

    while (contador <= 3)
    {

        if (random == chute)
        {
            alert("Parabéns! Você acertou!");
            break;
        }
        if (random > chute)
        {
            chute = parseInt(prompt("O número chutado é menor que o número pensado. Tente novamente!"));
        }
        else 
        {
            chute = parseInt(prompt("O número chutado é maior que o número pensado. Tente novamente!"));
        }
        contador++;    
    }

    if(contador > 3)
    {
        alert("Seu número de tentativas acabou. O número pensado era " + random);
    }


</script>
3 respostas
solução!

Oi Eduarda, tudo bem?

Isso acontece porque na primeira vez que você pede para o usuário digitar um número, nós não mudamos o contador:

var chute = parseInt(prompt ("Digite aqui o seu chute de número inteiro entre 0 e 10!"));
var random = sorteia();
var contador = 1;

Perceba que o contador começa com o valor 1, enquanto o while não vai parar até que ele seja menor ou igual a 3. Portanto, estamos chutando 1 vez antes de entrar no while e depois mais 3 vezes até que o contador ultrapasse 3 e pare de ser executado o while. É por isso que estamos ultrapassando a quantidade de chutes que nós queremos!

Para resolver isso, podemos mudar a condição do while de menor ou igual a 3:

while (contador <= 3)

para menor que 3:

while (contador < 3)

Dessa forma forma, o fluxo do código seria mais ou menos assim:

  • Primeiro chute: contador = 1;

  • Entra no while;

  • Segundo chute: contador = 1, contador++;

  • Terceiro chute: contador = 2, contador++;

  • Quarto chute: contador = 3, não entra na condição while (contador < 3), portanto encerramos o programa antes de pedir o chute.

Espero ter ajudado, se ficou alguma dúvida é só avisar!

Bons estudos!!

Olá Eduarda!

Você está solicitando que o usuário insira um número a primeira vez aqui:

var chute = parseInt(prompt ("Digite aqui o seu chute de número inteiro entre 0 e 10!"));

Seu while verifica se o contador é menor ou igual a 3 e está começando de 1. Então, além de pedir a primeira vez no código que coloquei acima, vai solicitar o input do usuário mais 3 vezes por causa do while.

Se você quer que peça somente 3 vezes, pode colocar:

while (contador <= 2)

Aí terá o primeiro chute antes de entrar no loop while, e mais 2 vezes dentro dele.

Obrigada pela ajuda, gente!