【问题标题】:Java logical operators in return statements返回语句中的 Java 逻辑运算符
【发布时间】:2017-01-21 09:25:10
【问题描述】:

所以我正在努力解决codingbat.com 上的一些问题,以巩固我迄今为止学到的一些东西,并且预计有些问题提供的答案与我解决问题的方式不同.因此,对于一个问题,我使用了我在早期问题的答案中看到的样式/格式,并让它正常工作,但我只是想澄清一下逻辑。

问题来了:

给定 2 个 int 值,如果它们都在 30..40(含)范围内,或者它们都在 40..50(含)范围内,则返回 true。

这是我的代码:

public boolean in3050(int a, int b) {
  boolean in3040 = (a >= 30 && a <= 40) && (b >= 30 && b <= 40);
  boolean in4050 = (a >= 40 && a <= 50) && (b >= 40 && b <= 50);

  return in3040 || in4050;
}

所以这个答案有效,但是我想解释一下 return 语句以及 OR 运算符如何与两个布尔变量一起工作。此外,如果在变量之一之前有 AND 运算符或 NOT,该语句将如何工作。

谢谢!

【问题讨论】:

  • 它在 return 语句中的事实完全无关紧要。可能是boolean result = in3040 || in4050; return result;。那么,您对|| 运算符进行了哪些研究?你读过docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html吗?
  • 当 a 和 b 均为 40 时,如果使用 AND,它将返回 true。使用 NOT,将排除其中一个范围。

标签: java boolean logic boolean-logic


【解决方案1】:

在 Java 中,逻辑项是从左到右计算的。这意味着:

  • 对于 OR 语句:|| b --> 如果 a 已经为真,则整个术语必须为真,b 不会被计算,如果 a 为假,b 仍然可以为真,在这种情况下,两个变量都将被计算
  • 对于 AND 语句:a && b-> 如果 a 已经为假,则同样的逻辑适用:不需要计算 b 变量

你可以想象如下重写你的条件操作:

if (in3040) {
 return true;
}
if (in4050) {
 return true;
}

考虑到使用 &&-Operator 的情况

if (!in3040) {
 return false;
}
if(!in4050) {
 return false;
}
return true;

【讨论】:

    【解决方案2】:

    这些运算符在 return 语句中的工作方式与程序中其他所有地方的工作方式完全相同。

    【讨论】:

      【解决方案3】:

      等效

      return [some expression] 等价于return ([some expression])

      因此,return in3040 || in4050; 等价于 return ( in3040 || in4050 );

      【讨论】:

      • 你混淆了陈述和表达方式。
      猜你喜欢
      • 2017-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2015-11-28
      相关资源
      最近更新 更多