Rock剪刀控制流程问题?

问题描述 投票:-1回答:1

因此,我对Javascript还是很陌生,在我的剪刀石头布游戏中,除决定获胜者的部分外,其他一切(用户输入,计算机生成的输入等)都可以正常工作。我输入的return语句仅触发联系。获胜或失败最终以“未定义”返回控制台,没有错误。

  if (finalPlayer === finalAi)
  {
    return 'No one won';
  }  

  //checks for player scissors choice

  else if (finalPlayer === 'Scissors')
  {
    if (finalAi === 'rock')
    {
      return 'You lost.';
    }
    else
    {
      return 'You won!';
    }

这是我的代码的一小段。有什么建议么?预先感谢!

javascript control-flow
1个回答
0
投票

想象一下,如果外部if... else if的两个条件不成立,将会发生什么……什么都没有。这意味着您的函数将返回undefined

当然,在某些情况下都不是这样:

(finalPlayer === finalAi)
(finalPlayer === 'Scissors')

如果finalPlayer === 'paper'怎么办?如果finalPlayer == 'rock'怎么办?您应该处理所有可能。

NB:为什么您用大写字母拼写“ Scissors”而不是?”>

您的代码的简单扩展名可能是:

if (finalPlayer === finalAi) {
    return 'No one won';
} else if (finalPlayer === 'scissors') {
    if (finalAi === 'rock') {
        return 'You lost.';
    } else {
        return 'You won!';
    }
} else if (finalPlayer === 'rock') {
    if (finalAi === 'paper') {
        return 'You lost.';
    } else {
        return 'You won!';
    }
} else { // we know for sure finalPlayer == 'paper' now
    if (finalAi === 'scissors') {
        return 'You lost.';
    } else {
        return 'You won!';
    }
}

现在您已经涵盖了所有可能的情况,并且不会获得任何undefined

当然可以使用更短的方法来完成此操作,但是通过此操作,您将了解如何继续做下去,但又添加了其他可能性。

更短的方式

只需完成此答案,这就是使用较少的代码即可完成的操作:

let choices = ["scissors", "rock", "paper"];
let diff = choices.indexOf(finalPlayer) - choices.indexOf(finalAi);
return ["No one won", "You won", "You lost"][(diff+3)%3];
© www.soinside.com 2019 - 2024. All rights reserved.