这些代码行之间有什么区别?

时间:2019-01-28 14:17:40

标签: java

我正在学习用Java编写代码,并且正在做一些在线练习,答案没有太多解释,所以我很好奇为什么我的代码看起来与解决方案相似时是不正确的。

练习说-

“给出2个int值,如果一个为负且一个为正,则返回true。除非参数“ negative”为true,否则仅当两个都为负时才返回true。”

public boolean posNeg(int a, int b, boolean negative) {
  if (negative && (a < 0 && b < 0)) {
  return true;
  }

return (a < 0 && b > 0 || a > 0 && b < 0);

} // This is my code that yields unwanted results

public boolean posNeg(int a, int b, boolean negative) {
  if (negative) {
    return (a < 0 && b < 0);
  }
  else {
    return ((a < 0 && b > 0) || (a > 0 && b < 0));
  }
} // This is the solution code

运行posNeg(-4,5,true);即使它被认为是错误的,它仍然是真实的。每当一个int为负数而另一个int为正数且负数为true时,则该值应为假,但得出的结果为真。

1 个答案:

答案 0 :(得分:0)

public boolean posNeg(int a, int b, boolean negative) {
  if (negative && (a < 0 && b < 0)) {
    return true;
  }

  return (a < 0 && b > 0 || a > 0 && b < 0);

} // This is my code that yields unwanted results

调用posNeg(-4, 5, true);会使第一个条件为假negative && (a < 0 && b < 0) <===> true &&(true && false)<===> false。 然后,运行跳转到该if的末尾,并评估最后一个条件(a < 0 && b > 0) || (a > 0 && b < 0),这显然是正确的。