#javascript
#javascript
Вопрос:
У меня есть эти операторы If, основанные на функции Math.random(), и она работает по большей части, но иногда ничто не вычисляется как true
Я попытался изменить числа, которые сравнивают логические операторы, и я попытался изменить число, на которое умножается 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();
}
},
Это одна из двух частей, которые имеют одну и ту же проблему, другая при копировании и вставке была действительно перепутана, поэтому я ее не учел, но если у кого-нибудь есть какие-либо идеи о том, почему это происходит или как это исправить, это было бы здорово.
Комментарии:
1. Когда ваш первый случайный
> 5
и ваш второй< 5
, да. Ничего не будет выполняться.
Ответ №1:
Вы генерируете два случайных числа. Новый каждый раз, когда вы пишете this.dodgeValue()
.
Кроме того, если значение равно точному 5
, то будут запущены обе ветви — вероятно, это не предполагаемое поведение.
Вы должны сделать что-то вроде let dodge = this.dodgeValue();
, а затем использовать if( dodge <= 5)
. Кроме того, вы должны использовать else
вместо «если тогда … если не A, то … «
Ответ №2:
Это потому, что вы дважды вызываете dodgeValue , который дважды вызывает random .
На секунду игнорируя тот факт, что случайные числа в компьютерах на самом деле псевдослучайны, давайте посмотрим, что происходит, когда вы дважды вызываете dodgeValue, чтобы получить два случайных числа, как у вас.
Вы могли бы предположительно получить следующие числа из этого кода:
- 4
- 6 8
- 6 2
В первом случае первый if будет иметь значение true и выполняться, поскольку 4 <= 5
.
Первое if будет false , но второе if будет true , поскольку 6 > 5 (first if is false)
и 8 >= 5 (second if is true)
.
Теперь, что происходит в этом третьем случае? Оба if будут false , поскольку 6 > 5 (first if is false)
и 2 < 5 (second if is false)
.
Если вы хотите, чтобы это работало именно так (что я предполагаю, что нет), оставьте свой код как есть. Если нет, у вас есть 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();
}
},