JavaScript中的do while循环 - 猜数字游戏的循环

4
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> 
<head>
<title>Game</title>
<script type="text/javascript" src="game.js"></script>

</head>
<body>
    <h1>GameSite</h1>
    <p> This program will generate a random number. Please input your guess in the box!</p>
    <button onclick="guessGame()">Press me to play a quick game!</button>

<script>
    function guessGame(){
        number = Math.floor(Math.random()*11);
        document.write(number);
        var guess = prompt("Guess a number: ");
            do {
                guess = prompt("Keep guessing!");
                if (number < guess) {
                    prompt("You've guessed too high!");
                } else if (number > guess) {
                    prompt("You've guessed too low!");
                } else document.write("Good Job!");
            } while (guess != number);
    }
    </script>
    </body> 
</html>

我在循环中遇到了麻烦。它可以正常循环,但如果我将猜测语句移到if语句之后,它就会每次回到那里。如果我将其放在if语句之外,似乎实际上不允许我猜测有效的数字。很难解释:\

4个回答

5
我建议只使用一个提示并将其分配给变量。

function guessGame() {
    var number = Math.random() * 11 | 0,
        guess,
        text = 'Guess a number:';
    do {
        guess = prompt(text);
        if (number < guess) {
            text = "You've guessed too high!";
        } else if (number > guess) {
            text = "You've guessed too low!";
        }
    } while (guess != number);
    document.write("Good Job!");
}
guessGame();


但是当您按下按钮时,正确的数字会出现。 - Altay Mazlum
@AltayMazlum,这个行为在原始代码中也存在。 - Nina Scholz
我知道这一点,但你回答后并没有解决它,为什么? - Altay Mazlum
@AltayMazlum,这样好吗? - Nina Scholz
是的,谢谢。我之所以问是因为我也想知道它是如何完成的。 - Altay Mazlum

1

试试这个:

function guessGame(){
    number = Math.floor(Math.random()*11);
    document.write(number);
    var guess = prompt("Guess a number: ");
    while (guess != number) {
        if (number < guess) {
            guess = prompt("You've guessed too high! Keep guessing!");
        } else {
            guess = prompt("You've guessed too low! Keep guessing!");
        }
    }
    document.write("Good Job!");   
}

while循环会一直运行,直到猜对正确的数字,然后它将终止。
编辑:抱歉,因为打字太快而出现错误。

1
!==运算符真的是你开的一个非常糟糕的玩笑:由于提示结果是字符串而数字是整数,用户将注定要永远猜测。 - Jan Turoň
哦,谢谢你的纠正,Jan。我太习惯于总是使用"!=="了,以至于忽略了这一点。 - eddyjs
你为什么移除它?我会保留它,这样游戏会更有趣>:-D - Jan Turoň

0
我建议在不需要用户响应时使用alert
function guessGame(){
    number = Math.floor(Math.random()*11);
    var guess;
        do {
            guess = prompt("Guess a number: "); // you should handle string input here
            if (number < guess) {
                alert("You've guessed too high!");
                alert("Keep guessing!");
            } else if (number > guess) {
                alert("You've guessed too low!");
                alert("Keep guessing!");
            } 
        } while (guess != number);
        alert("Good Job!");
}

谢谢!最终我使用了警告框来跟随弹出框的风格! - Kacey Gambill

0

相信我,我是一名程序员。

    function guessGame() {
    guess:
            var number = Math.floor(Math.random() * 11);
            document.write(number);
            var guess;// = prompt("Guess a number: ");
            var text = 'Guess a number:';
            guess = prompt(text);
            if (number == guess) {
                document.write("Good Job!");
                return true;
            } else {
            if (number < guess) {
                text = "You've guessed too low!";
            } else {
                text = "You've guessed too high!";
            }
                goto guess;
            }
}
        guessGame();

这个答案是错误的。从语法错误到goto - Altay Mazlum
在JS中使用goto并不是那么容易(https://dev59.com/mWkw5IYBdhLWcg3woMFD#9751229),但另一方面,我们必须摆脱反对goto的社交浪潮。 - Jan Turoň

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接