用条件检查两个变量signum

时间:2016-09-02 08:21:02

标签: java boolean boolean-logic

给出2个整数和条件negative

  • 如果一个低于零且一个高于零且truenegative,则返回false
  • 如果两者都低于零且truenegative,则
  • 返回true
  • 否则返回false

试验:

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

我认为我的解决方案是在多次检查后才对。

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

4 个答案:

答案 0 :(得分:1)

对于(-4,5),

(a<0) && (b>0)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;

答案 1 :(得分:1)

首先检查是否

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

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

这两个都是

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

评估为true

答案 2 :(得分:0)

你有三个案件或彼此关系。由于其中一个案例是&#34; a是负数而b是正数&#34;,它将返回true。

如果否定为false,则需要确保前两种情况仅返回true。

例如,而不是

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

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

答案 3 :(得分:0)

这是一个简短的解决方案。

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