正面或反面游戏 javascript do/while 循环

Heads or tails game javascript do/while loop

我正在尝试使用 do/while 循环制作基本的正面或反面游戏。我的问题是我的提示似乎不会影响我的变量,因为无论我输入什么,它都会继续到下一部分,然后根本不会循环。我错过了什么吗?我做错了什么?

var userChoice;
var playAgain;

do {
    playAgain = prompt("Do you want to play Heads or tails?");
}
while (playAgain === "Yes") {
    userChoice = prompt("Choose Heads or Tails.");
    if (userChoice === "Heads") {
        coin = Math.random();
        if (coin <= 0.5) {
            console.log("You Win!");
        }
        else {
            console.log ("You lose");
        }
    }
    if (userChoice === "Tails") {
        coin = Math.random();
        if (coin > 0.5) {
            console.log("You Win!");
        }
        else {
            console.log("You lose");
        }
    }
    playAgain = prompt("Would you like to play again?");
};

您应该这样尝试:

var userChoice;
var playAgain;

playAgain = prompt("Do you want to play Heads or tails?");

while (playAgain === "Yes") {
    userChoice = prompt("Choose Heads or Tails.");
    if (userChoice === "Heads") {
        coin = Math.random();
        if (coin <= 0.5) {
            alert("You Win!");
        }
        else {
            alert ("You lose");
        }
    } else if (userChoice === "Tails") {
        coin = Math.random();
        if (coin > 0.5) {
            alert("You Win!");
        }
        else {
            alert("You lose");
        }
    }
    playAgain = prompt("Would you like to play again?");
}

do/while 循环执行 do 语句下的操作,而 while 条件不满足。通常,您倾向于避免 do/while 循环,除非您真的需要它,这种情况很少见。

此外,我将 console.log 替换为 window.alert 以保持一致性并避免查看控制台。

您混淆了 do-whilewhile 循环的语法。

do-while 循环是

do { block } while (condition)

while 循环是

while (condition) { block }

您尝试编写一个不存在的混合体,形式为

do { block1 } while (condition) { block2 }

JS 解析器会将其解释为:

do { block1} while (condition);
{ block2 }

其中分号是由自动分号插入机制插入的。换句话说,只要 condition 为真, block1 就会继续一遍又一遍地执行。然后,只有到那时,它才会继续执行 block2.

您可以自己调试这个问题,方法是在提示语句上放置一个断点,然后单步执行代码以查看它在做什么。

或者,运行 像 jshint 这样的程序覆盖你的代码,它会报告

line 7, col 28, Missing semicolon

这会给您提供有关问题的线索。

解决方案是使用正确的语法重写您的代码,很可能是一个普通的旧 while 循环。