无法使我的函数多次 运行 并破坏我的代码
Can't get my function to run more than once and break my code
我正在尝试 运行 这个功能,直到玩家或电脑赢了 5 次。如果没有 while 循环,它 运行 一次,一切正常。一旦我添加了一个 while 循环,该函数仍然只有一次 运行s,它给了我一个未定义的 return.
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];
}
}
console.log(playToFive());
Return 将终止你的循环
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());
您正在 returnwhile 循环中,这将结束循环过程。因此,将您的 return 代码移到循环之外,如下所示。另请注意,您的逻辑语句不会允许循环正确地 运行 。
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());
请允许我补充一点,您的代码的间距很有帮助,'vertical' 看起来有点像右括号。请注意上面的间距如何帮助从视觉上识别这样的东西:)
您需要将 return
语句移到 while 循环之外,但您还需要更改 while
循环的条件 - 现在它仅在 playerWins
或 computerWins
恰好是 5,而实际上它需要在该点停止 运行(所以 while(playerWins < 5 && computerWins < 5)
)
if-else结构求值执行后,无条件调用return
语句,提前结束循环。您应该将 return
放在 循环之后。此外,循环条件应该是只要玩家都没有达到 5 杯酒(使用 <
运算符计算):
while (playerWins < 5 && computerWins < 5 ) {
if (humanVsMachine === 'player') {
playerWins +=1;
} else if (humanVsMachine === 'computer') {
computerWins += 1;
}
}
return [playerWins, computerWins];
while(playerWins === 5 || computerWins === 5)
您的 while 循环实际上永远不会执行,因为您正在检查是否相等并且 playerWins
和 computerWins
最初都是 0
。
您可能正在寻找更像这样的条件:
while(playerWins < 5 && computerWins < 5)
请注意,我们使用逻辑 AND &&
而不是逻辑 OR ||
。这是因为您不想一直循环直到他们都赢了。逻辑 OR 意味着即使计算机赢了但玩家没有赢,我们也会继续循环。只有一个条件需要为真,整个陈述为真。
当我们使用逻辑与时,如果其中一个为假(意思是,如果只有一个玩家已经达到 5 胜),那么我们将按我们应该的方式跳出循环。
下一个问题是你的while循环中有一个return语句,所以在第一次执行后,即使还没有达到5胜,它也会return数组玩家的胜利和计算机的胜利。
你应该把 return 语句 放在 循环之后,这样你 运行 循环 5 次,然后 return 在某人有赢了。
最后,由于您没有提供其余代码,我不确定 humanVsMachine
是否真的定义了;如果您在函数之外定义了它,那么您就可以开始了。
我正在尝试 运行 这个功能,直到玩家或电脑赢了 5 次。如果没有 while 循环,它 运行 一次,一切正常。一旦我添加了一个 while 循环,该函数仍然只有一次 运行s,它给了我一个未定义的 return.
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];
}
}
console.log(playToFive());
Return 将终止你的循环
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());
您正在 returnwhile 循环中,这将结束循环过程。因此,将您的 return 代码移到循环之外,如下所示。另请注意,您的逻辑语句不会允许循环正确地 运行 。
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());
请允许我补充一点,您的代码的间距很有帮助,'vertical' 看起来有点像右括号。请注意上面的间距如何帮助从视觉上识别这样的东西:)
您需要将 return
语句移到 while 循环之外,但您还需要更改 while
循环的条件 - 现在它仅在 playerWins
或 computerWins
恰好是 5,而实际上它需要在该点停止 运行(所以 while(playerWins < 5 && computerWins < 5)
)
if-else结构求值执行后,无条件调用return
语句,提前结束循环。您应该将 return
放在 循环之后。此外,循环条件应该是只要玩家都没有达到 5 杯酒(使用 <
运算符计算):
while (playerWins < 5 && computerWins < 5 ) {
if (humanVsMachine === 'player') {
playerWins +=1;
} else if (humanVsMachine === 'computer') {
computerWins += 1;
}
}
return [playerWins, computerWins];
while(playerWins === 5 || computerWins === 5)
您的 while 循环实际上永远不会执行,因为您正在检查是否相等并且 playerWins
和 computerWins
最初都是 0
。
您可能正在寻找更像这样的条件:
while(playerWins < 5 && computerWins < 5)
请注意,我们使用逻辑 AND &&
而不是逻辑 OR ||
。这是因为您不想一直循环直到他们都赢了。逻辑 OR 意味着即使计算机赢了但玩家没有赢,我们也会继续循环。只有一个条件需要为真,整个陈述为真。
当我们使用逻辑与时,如果其中一个为假(意思是,如果只有一个玩家已经达到 5 胜),那么我们将按我们应该的方式跳出循环。
下一个问题是你的while循环中有一个return语句,所以在第一次执行后,即使还没有达到5胜,它也会return数组玩家的胜利和计算机的胜利。
你应该把 return 语句 放在 循环之后,这样你 运行 循环 5 次,然后 return 在某人有赢了。
最后,由于您没有提供其余代码,我不确定 humanVsMachine
是否真的定义了;如果您在函数之外定义了它,那么您就可以开始了。