无法让我的函数多次运行并破坏我的代码

时间:2015-05-21 18:22:25

标签: javascript while-loop

我正在尝试运行此功能,直到玩家或计算机获胜5次。没有while循环,它运行一次,一切正常。只要我添加一个while循环,该函数仍然只运行一次,它给我一个未定义的返回。

{{1}}

5 个答案:

答案 0 :(得分:3)

while(playerWins === 5 || computerWins === 5)

您的while循环实际上永远不会执行,因为您正在检查相等性,playerWinscomputerWins最初都是0

您可能正在寻找更像这样的条件:

while(playerWins < 5 && computerWins < 5)

请注意,我们使用逻辑AND &&代替逻辑OR ||。这是因为你不想继续循环,直到他们都获胜。逻辑OR意味着即使计算机赢了但玩家没有,我们也会继续循环。只有其中一个条件必须成立才能使整个陈述成为现实。

当我们使用逻辑AND时,如果其中一个是假的(意思是,如果只有一个玩家已经达到5胜),那么我们将按照我们应该的那样突破循环。

接下来的问题是你的while循环中有一个return语句,所以在第一次执行之后,即使还没有达到5次胜利,它也会返回玩家获胜的数组和计算机的胜利。

你应该在循环之后放置返回语句,这样你就可以运行循环5次,然后在有人赢了之后返回。

最后,由于您还没有提供其余的代码,我不确定humanVsMachine是否实际定义;如果你在函数之外定义了那么你就可以了。

答案 1 :(得分:2)

在评估并执行if-else结构之后,无条件地调用return语句,从而过早地终止循环。您应该将return 放在循环之后。此外,循环条件应该是任何玩家都不会达到5种葡萄酒(使用<运算符评估):

while (playerWins < 5 && computerWins < 5 ) {
    if (humanVsMachine === 'player') {
        playerWins +=1;
    } else if (humanVsMachine === 'computer') {
        computerWins += 1;
    }
}
return [playerWins, computerWins];

答案 2 :(得分:1)

您需要在while循环之外移动return语句,但您还需要在while循环中更改条件 - 现在它只在playerWinscomputerWins正好是5,实际上它需要在此时停止运行(所以while(playerWins < 5 && computerWins < 5)

答案 3 :(得分:0)

返回将终止您的循环

function returnMe() {
  for (var i=0; i<2; i++) {
    if (i === 1) return i;
  }
}

alert(returnMe()); Try this out 


function playToFive() {
    console.log('Let\'s play Rock Paper Scissors');
    var playerWins = 0;
    var computerWins = 0;
    while (playerWins === 5 || computerWins === 5) {
        if (humanVsMachine === 'player') {
        playerWins += 1;
        } else if (humanVsMachine === 'computer') {
        computerWins += 1;
        }
    // return [playerWins, computerWins]; moving code to below
    }
    return [playerWins, computerWins]; // moved return outside the loop here
}

console.log(playToFive());

答案 4 :(得分:0)

你在while循环中返回,这将结束循环过程。因此,请将返回代码移到循环外部,如下所示。另请注意,您的逻辑语句不允许循环正常运行。

function playToFive() {
    console.log('Let\'s play Rock Paper Scissors');
    var playerWins = 0;
    var computerWins = 0;
    while (playerWins < 5 && computerWins < 5 ) {
        if (humanVsMachine === 'player') {
        playerWins += 1;
        } else if (humanVsMachine === 'computer') {
        computerWins += 1;
        }
    // return [playerWins, computerWins]; moving code to below
    }
    return [playerWins, computerWins]; // moved return outside the loop here
}

console.log(playToFive());

请允许我添加代码间距,帮助很多,它有点“垂直”#39;用右括号看。注意上面的间距有助于在视觉上识别这样的事情:)