【问题标题】:How do I pick the closest integer to a random number?如何选择最接近随机数的整数?
【发布时间】:2020-02-07 16:40:08
【问题描述】:

我试着做一个小游戏,你必须猜计算机会选择哪个数字。更接近数字的选秀权应该获胜。现在我不知道如何编写一个比较值并选择更接近secretNumber 的if/switch。

这是我当前用于评估谁获胜的代码。如您所见,我只能处理与秘密号码完全相同的中奖者。

    if (user1Guess == user2Guess && user1Guess == secretGuess) {
        console.log(`TIE!`)
    } else if (user1Guess == secretNumber && user2Guess !== secretNumber){
        console.log(`Player 1 wins!`)
    } else if (user1Guess !== secretNumber && user2Guess == secretNumber) 
        {
        console.log(`Player 2 wins!`)
    };

【问题讨论】:

  • 附注:可能尽量与您的相等运算符保持一致,通常建议在所有情况下使用严格版本 (===),除非您有明确的理由使用常规版本(==)。请记住,!== 是严格的,!= 是常规的,现在您可以同时使用两者。

标签: javascript if-statement integer compare


【解决方案1】:

取每个猜测与secretNumber 之间差异的绝对值。最接近的猜测将是差异较小的那个:

const user1Diff = Math.abs(user1Guess - secretGuess);
const user2Diff = Math.abs(user2Guess - secretGuess);
if (user1Diff === user2Diff) {
  console.log('Tie');
} else if (user1Diff > user2Diff) {
  console.log('Player 2 wins');
} else {
  console.log('Player 1 wins');
}

【讨论】:

    【解决方案2】:

    您可以使用Math.abs() 获取用户猜测之间的差异,并使用secretNumber 进行比较并决定谁获胜。

    希望这个 sn-p 有帮助:

    const user1Guess = Math.floor(Math.random() * 100) + 1, // Random number between 1-100 to mock user input
      user2Guess = Math.floor(Math.random() * 100) + 1, // Random number between 1-100 to mock user input
      secretNumber = Math.floor(Math.random() * 100) + 1, // Random number between 1-100 to mock computer pick
      user1Diff = Math.abs(user1Guess - secretNumber),
      user2Diff = Math.abs(user2Guess - secretNumber);
    
    if (user1Diff === user2Diff) {
      console.log(`TIE!`)
    } else if (user1Diff < user2Diff) {
      console.log(`Player 1 wins!`)
    } else if (user1Diff > user2Diff) {
      console.log(`Player 2 wins!`)
    } else {
      console.log(`You broke the game, congrats!`)
    }

    顺便说一句,你在 if 声明的开头有一个错字:secretGuess 必须是 secretNumber

    【讨论】:

      【解决方案3】:

      让我们想想猜测更接近意味着什么。

      如果xy 更接近n。那么xn的距离一定小于yn的距离。

      对于数字,xn 的距离为abs(n - x),这是差异的绝对值。绝对值始终为非负数。比如-3的绝对值是3

      所以如果xy 更接近n,那一定意味着以下也是正确的:

      Math.abs(n - x) < Math.abs(n - y)
      

      然后您可以在 if 语句条件中使用这些。

      const user1Distance = Math.abs(secretNumber - user1Guess);
      const user2Distance = Math.abs(secretNumber - user2Guess);
      
      if (user1Distance === user2Distance) {
          console.log("TIE!");
      } else if (user1Distance < user2Distance) {
          console.log("Player 1 wins!");
      } else {
          console.log("Player 2 wins!");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-20
        • 2019-08-08
        • 2022-01-17
        • 1970-01-01
        • 2012-10-07
        相关资源
        最近更新 更多