头或尾游戏javascript do / while循环

时间:2016-03-31 12:23:11

标签: javascript loops variables do-while prompt

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

2 个答案:

答案 0 :(得分:2)

你应该尝试这样:

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条件的情况下,do / while循环在while语句下执行操作。通常,你倾向于避免使用do / while循环,除非你真的需要它,这是非常罕见的。

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

答案 1 :(得分:1)

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

do-while循环

do { block } while (condition)

while循环

while (condition) { block }

你曾试图写一种形式为

的不存在的混合体
do { block1 } while (condition) { block2 }

JS解析器将此解释为:

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

其中通过自动分叉插入机构插入分号。换句话说,只要block1为真,condition将继续执行。然后,只有这样,它才会继续执行block2

您可以通过在提示语句上放置断点并逐步执行代码来查看它正在执行的操作来自行调试此问题。

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

line 7, col 28, Missing semicolon

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

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