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

Heads or tails game javascript do/while loop

本文关键字:while 循环 do 游戏 javascript      更新时间:2023-10-30

我正在尝试使用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循环在不满足while条件的情况下执行do语句下的操作。通常,除非你真的需要,否则你倾向于避免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

您可以通过在prompt语句上放置一个断点来调试这个问题,然后逐步查看代码,看看它在做什么。

或者,在代码上运行一个类似jshint的程序,它会报告

line 7, col 28, Missing semicolon

这会给你关于这个问题的线索。

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