Несколько правил
- выражения этого типа оцениваются слева направо.
- выражения, использующие
&&
, оцениваются как группа, поэтому a || b && c
равно
оценивается как a || (b && c)
, а не как (a || b) && c
Теперь, учитывая ваш вопрос, подумайте об этом так.
if (a && b && !c || d) {
// do something
}
- если
d
когда-либо true, тогда выражение будет истинным. - если
d
ложно, тогда выражение будет истинным, только если a, b, and !c
также истинны. - Итак, если погода прекрасная, сейчас дневной свет, а не дождь, это будет верно независимо от температуры.
- если температура> = 60, это будет также верно независимо от других критериев.
Я не могу сказать вам, как именно это исправить, так как я не знаю ваших критериев. Но есть возможность.
while (isWeatherBeautiful || (isDaylight && !(Rain) && temperature >= 60))
- если погода прекрасная, то все остальное не имеет значения, поэтому он стоит сам по себе
- если сейчас дневной свет, без дождя и относительно тепло , тогда это тоже хороший день
Вот таблицы истинности для | (или) и & (и)
+---+---+-------+ +---+---+-------+
| A | B | A | B | | A | B | A & B |
+---+---+-------+ +---+---+-------+
| T | T | T | | T | T | T |
+---+---+-------+ +---+---+-------+
| T | F | T | | T | F | F |
+---+---+-------+ +---+---+-------+
| F | T | T | | F | T | F |
+---+---+-------+ +---+---+-------+
| F | F | F | | F | F | F |
+---+---+-------+ +---+---+-------+