JAVA Как будет оцениваться оператор IF, если || (ИЛИ), а также && (И) помещаются в один и тот же оператор if - PullRequest
0 голосов
/ 26 февраля 2020

В настоящее время я работаю над небольшим личным проектом, чтобы помочь себе узнать о кодировании. Я хотел бы узнать в будущем, смогу ли я объединить логические операторы разных типов в одном операторе if.

Например, если бы у меня было

if (n == 0 || n == 1 && m == 0 || m == 1) {
  doSomething();
}

Будет ли проверяться, будет ли какая-либо часть Левая сторона - это истина, тогда, если любая из правых частей верна, или она выполнит что-то похожее на проверку, являются ли обе средние верными?

Меняет ли использование скобок что-нибудь Например,

if ((n == 0 || n == 1) && (m == 0 || m == 1)) {
  doSomething();
}

Редактировать: По предложению я попробовал его, но когда я поместил три переменные, он начал действовать странно. Вот мой тест:

int n = 1;
int m = 1;
int o = 1;

if (n == 0 || n == 1 && m == 0 || m == 1 && o == 0 || o == 1) {
  System.out.println("True");
}
else {
  System.out.println("False");
}

if ((n == 0 || n == 1) && (m == 0 || m == 1) && (o == 0 || o == 1)) {
  System.out.println("True");
}
else {
  System.out.println("False");
}

, если все они равны 1 или 0, они оба оценивают значение true , если n или m не равно 1 или 0, верхняя часть оценивает значение true, а нижняя - нет.

Однако, если o не равно 0 или 1, оба они ложны. Я обнаружил, что скобки на самом деле имеют значение, но я не могу понять, почему он действует так, как есть.

1 Ответ

1 голос
/ 26 февраля 2020

&& имеет более высокий приоритет, чем ||, поэтому n == 0 || n == 1 && m == 0 || m == 1 равно n == 0 || (n == 1 && m == 0) || m == 1. Вы можете проверить таблицу приоритетов здесь .

...