我有这些基于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();
}
},
这是两个有相同问题的部分之一,另一部分在复制和粘贴时确实很混乱,因此我将其遗漏了,但是如果有人对为什么发生或如何解决有任何想法,那将是很棒的
答案 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 <= 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();
}
},