【问题标题】:JAVA How will an IF statement evaluate if || (OR) as well as && (AND) are placed in the same if statementJAVA IF 语句将如何评估 if || (OR) 和 && (AND) 放在同一个 if 语句中
【发布时间】:2020-02-26 01:28:58
【问题描述】:

目前我正在做一个小小的个人项目来帮助自己学习编码。 我想知道是否可以在单个 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,它们都是假的。 我发现括号确实会产生影响,但我不能完全说明为什么它会这样。

【问题讨论】:

  • 为什么不简单地编写一个小程序来测试结果——创建自己的“真值表”?
  • 接下来,一个有用又实用的学习工具就是维恩图,它也会给你带来问题的正确答案
  • 使用方括号来明确您的意图。 6 个月后它会更容易理解。
  • 为什么不直接查一下语言规范?

标签: java if-statement logical-operators operator-precedence


【解决方案1】:

&& 的优先级高于||,因此n == 0 || n == 1 && m == 0 || m == 1 等于n == 0 || (n == 1 && m == 0) || m == 1。你可以查看优先表here

【讨论】:

  • 我强烈建议不要依赖它。这并不明显并且降低了可读性。
  • 恰恰相反,是多余的括号降低了可读性。对于任何称职的程序员来说,这应该是显而易见的。运算符优先级在三年级时首次教授。这不是一个深奥的概念。
猜你喜欢
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 2013-11-04
  • 1970-01-01
相关资源
最近更新 更多