Почему не работает оператор "not" (логический)? - PullRequest
0 голосов
/ 19 июня 2020

while (isWeatherBeautiful && isDaylight && !(Rain) || temperature >= 60)

Правильно ли я разместил оператор (!) И все скобки? Все операторы работают нормально и делают то, что должны делать, но оператор «not» продолжает цикл независимо от «true» или «false». Есть подсказки?

Это домашнее задание ... а это значит, что я должен как-то использовать (!). Иначе бы просто выбросил.

1 Ответ

1 голос
/ 19 июня 2020

Несколько правил

  • выражения этого типа оцениваются слева направо.
  • выражения, использующие &&, оцениваются как группа, поэтому 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   |      
 +---+---+-------+      +---+---+-------+      

...