【问题标题】:Heads or tails game javascript do/while loop正面或反面游戏 javascript do/while 循环
【发布时间】:2016-07-19 21:45:33
【问题描述】:

我正在尝试使用 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?");
};

【问题讨论】:

  • 查看do-while 循环的语法。或者,在您的调试器中,在prompt 语句上放置一个断点,然后单步执行您的代码以查看它在做什么。或者,在您的代码上运行类似jshint 的程序,它会报告line 7, col 28, Missing semicolon.,这应该可以为您提供有关问题的线索。

标签: javascript loops variables do-while prompt


【解决方案1】:

你应该这样尝试:

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/while循环在while条件不满足的情况下执行do语句下的动作。准确来说应该是do/while循环执行do语句下的动作一次,然后在满足while条件时重复。
【解决方案2】:

您混淆了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 循环。

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多