用条件检查两个变量符号

Check two variables signum with condition

给定 2 个整数和条件 negative:

测试:

posNeg(1, -1, false) expected: true
posNeg(-1, 1, false) expected: true
posNeg(-4, -5, true) expected: true
posNeg(-4, 5, true)  expected: false

我的解决方案是:

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

但是这个案例是错误的

posNeg(-4, 5, true) expected: false | actual: true

我反复检查了几次,我觉得我的解决方案是对的。

请让我知道我哪里错了。为什么这个解决方案不正确?

(a<0) && (b>0) 对于 (-4, 5) 是 true

(X || true) || Y = true

像这样重构条件:

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

if (negative) return a < 0 && b < 0;
else return a < 0 && b > 0 || a > 0 && b < 0;

return negative 
    ? a < 0 && b < 0
    : a < 0 && b > 0 || a > 0 && b < 0;

首先你检查是否

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

不看 negativetrue 还是 false。条件从左到右检查。

这使得两者

posNeg(-4, 5, true)
posNeg(-4, 5, false)

评估为 true

你有3个案例,彼此有或有关系。由于其中一种情况是 "a is negative and b is positive",它将 return 为真。

如果否定为假,您需要确保只有前两种情况 return 为真。

例如

((a>0) && (b<0))

(a > 0 && b < 0 && !negative)

这是简短的解决方案。

public boolean posNeg(int a, int b, boolean negative) {
    return negative == a > 0 == b > 0;
}