有时,如果在if语句中没有任何结果为真

时间:2019-04-16 16:24:31

标签: javascript

我有这些基于Math.random()函数的If语句,它在大多数情况下都有效,但是有时没有结果为真

我也尝试过更改布尔语句比较的数字,并且尝试过更改Math.random乘以的数字

var dodge = {
    dodgeValue: function() {
      return Math.floor(Math.random() * 10) + 1
    },
    roll: function() {
      console.log('ROLL AFTER DODGE?'); //DELETE THIS
      if (this.dodgeValue() <= 5) {
        console.log('Ball Rolls to Person One');
        dodgeBall.ball.position = 'on ground';
        dodgeBall.personOne.ball();

      }
      if (this.dodgeValue() >= 5) {
        console.log('Ball Rolls to Person Two');
        dodgeBall.ball.position = 'on ground';
        dodgeBall.personTwo.ball();

      }
    },

这是两个有相同问题的部分之一,另一部分在复制和粘贴时确实很混乱,因此我将其遗漏了,但是如果有人对为什么发生或如何解决有任何想法,那将是很棒的

2 个答案:

答案 0 :(得分:4)

您正在生成两个随机数。每次您写this.dodgeValue()时都会写一个新的。

此外,如果值恰好是5,则两个分支都将运行-这可能不是预期的行为。

您应该执行类似let dodge = this.dodgeValue();的操作,然后使用if( dodge <= 5)。另外,您应该使用else而不是“ if A then ... ... if not A then ...”

答案 1 :(得分:0)

那是因为您两次调用了dodgeValue,而两次调用了random。

忽略计算机are actually psudeorandom中的随机数这一事实,让我们看看两次调用dodgeValue来获得像您一样的两个随机数会发生什么情况。

可以想象,您可以从此代码中获得以下数字:

  • 4
  • 6 8
  • 6 2

在第一种情况下,自4 <= 5起,第一个if将为true并执行。

由于6 > 5 (first if is false)8 >= 5 (second if is true),第一个if为假,第二个if为真。

现在,在第三种情况下会发生什么?由于6 > 5 (first if is false)2 < 5 (second if is false),两个if均为假。

如果这是您打算使其工作的方式(我假设并非如此),请保持您的代码不变。如果没有,您可以根据需要选择2种选择。

如果以后需要存储dodgeValue的输出,则可以使用变量:

var dodge = {
    dodgeValue: function() {
      return Math.floor(Math.random() * 10) + 1
    },
    roll: function() {
      console.log('ROLL AFTER DODGE?'); //DELETE THIS
      var val = this.dodgeValue();
      if (val <= 5) {
        console.log('Ball Rolls to Person One');
        dodgeBall.ball.position = 'on ground';
        dodgeBall.personOne.ball();

      }
      if (val >= 5) {
        console.log('Ball Rolls to Person Two');
        dodgeBall.ball.position = 'on ground';
        dodgeBall.personTwo.ball();

      }
    },

如果只需要它们彼此相对,则只需使用else子句即可。

var dodge = {
    dodgeValue: function() {
      return Math.floor(Math.random() * 10) + 1
    },
    roll: function() {
      console.log('ROLL AFTER DODGE?'); //DELETE THIS
      if (this.dodgeValue() <= 5) {
        console.log('Ball Rolls to Person One');
        dodgeBall.ball.position = 'on ground';
        dodgeBall.personOne.ball();

      } else {
        console.log('Ball Rolls to Person Two');
        dodgeBall.ball.position = 'on ground';
        dodgeBall.personTwo.ball();

      }
    },