1
resposta

Travado em um problema

Bom galera, estou fazendo o curso de lógica de programação e tenho tentado ir um pouco além para compreender melhor os conceitos, mas acabei travando em um código

<!DOCTYPE html>
<html lang="pt-BR">
    <head>
        <meta charset="UTF-8" />
        <title>Document</title>
    </head>
    <body>
        <form>
            <label for="user-number">Enter with your kick</label><br>
            <input type="number" id="user-number" value=""><br>
            <input type="button" value="Play" onclick="playGame()"><br>
        </form>
        <div id="game-result"></div>
        <script src="./index.js"></script>
    </body>
</html>
let randomNumber = Math.round(Math.random() * 10);
let trys = 0;
console.log(trys);

function playGame() {

    while (trys <= 2) {
        let userNumber = document.getElementById("user-number").value;
        if (userNumber > randomNumber) {
            document.getElementById("game-result").innerHTML = "Your Kick was greater than number thinked";
        } else if (userNumber < randomNumber) {
            document.getElementById("game-result").innerHTML = "Your kick was less than number thinked";
        } else {
            document.getElementById("game-result").innerHTML = `You Win, the number thinked was: ${randomNumber}`;
            break;
        }
        trys++
    }

}

Quando o usuário clica no botão o While não funciona corretamenta, acredito eu que toda vez que o botão é acionado uma nova chamada da função é feita, logo o loop é resetado e as tentativas de acerto ficam infinitas. Queria saber se existe alguma maneira simples de resolver esse problema, já que a chamada da ação é feita ao clicar no botão, tentei algumas mas consegui nada.

1 resposta

Ruhan, boa noite, tudo bem ?

Na verdade o while está funcionando corretamente, a sua lógica é que não está correta.

Quando você chama a função playGame(), o while irá executar enquanto a condição de teste não for satisfeita, no seu caso:

while (trys <= 2) 

Portanto, na primeira vez que você clica no botão sua variável trys é igual a 0, quando sua função é chamada ela executa o loop while enquanto a sua variável trys for menor que 2, ou seja, 3 vezes. Depois disso a sua função não executa mais o seu while, pois sua condição já foi satisfeita, ja que a sua variável trys já está setada como 2. Você clicará no botão e ela não fará nada.

Nesse caso, você não precisa de um loop while, você pode utilizar a mesma lógica com os ifs, porém faça tudo sem utilizar o while.

            function playGame() {
                let userNumber = document.getElementById("user-number").value;
                if (userNumber > randomNumber) {
                    document.getElementById("game-result").innerHTML =
                        "Your Kick was greater than number thinked";
                } else if (userNumber < randomNumber) {
                    document.getElementById("game-result").innerHTML =
                        "Your kick was less than number thinked";
                } else {
                    document.getElementById(
                        "game-result"
                    ).innerHTML = `You Win, the number thinked was: ${randomNumber}`;
                }
            }

Caso queira, também pode utilizar o switch case.

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/switch

Espero ter te ajudado!