给出2个整数和条件negative
:
true
为negative
,则返回false
。true
为negative
,则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
我认为我的解决方案是在多次检查后才对。
请让我知道我哪里错了。为什么这个解决方案不正确?
答案 0 :(得分:1)
(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)
不查看negative
是true
还是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;
}