Abhishek Sharma - 1 month ago 5
Java Question

# Check two variables signum with condition

Given 2 integers and condition

`negative`
:

• return
`true`
if one is below zero and one is above zero and
`negative`
is
`false`
.

• return
`true`
if both are below zero and
`negative`
is
`true`
.

• return
`false`
otherwise.

Tests:

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

My solution to the problem is :

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

But It is wrong for the case

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

I think my solution is right after checking again several times.

Kindly let me know where I am wrong. Why this solution is incorrect?

You have three cases in an or relation to each other. Since one of the cases is "a is negative and b is positive", it will return true.

You need to make sure the first two cases only return true if negative is false.

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