# comparing sign of a number in java

Hi,

I want to check to see if given integers digits a, b are both positive or both negative. How do i do that in java.

LVL 7
###### Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
Does 0 count as positive?
0
Full-stack Java DeveloperCommented:
Int a,b;
If (a*b >=0) { // both positive or both negative or one or both are zero}
Else {// a and b have different signs}
0
Commented:
Are the integers small enough to be sure they won't overflow when multiplied?
0
Commented:
boolean bothPositive = (a > 0 && b > 0) ;              // Or >= 0 if you wish to include 0 as positive.
boolean bothNegative = (a < 0 && b < 0) ;
boolean bothSameSign = (bothPositive || bothNegative) ;

Doug
0
Commented:
Use the signum function of the Integer class -
public static int signum(int i)

Returns the signum function of the specified int value. (The return value is -1 if the specified value is negative; 0 if the specified value is zero; and 1 if the specified value is positive.)
0

Experts Exchange Solution brought to you by

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Commented:
``````int pos =1;
int neg =- 1;
int sum;

String result;

sum = (Integer.signum(pos)+Integer.signum(neg));

System.out.println(result = sum>0?"Both Positive":sum<0?"Both Negative":"One is negative, one positive");
``````
0
Author Commented:
How do i say if given number (say a) signature is  negative then print like 'given number 'a' is a negative number'. Please advise
0
Author Commented:
if(Integer.signum(a)==-1){
System.out.println("given number 'a' is a negative number");
}

0
Full-stack Java DeveloperCommented:
System.out.println (a.toString () + "is a negative number");
0
Author Commented:
how to check below number a is negative or not in if condition using signum method?
if(Integer.signum(a)==-1){
0
Commented:
The return values from Integer.signum(int) is the check. Please read my post at ID: 40339683

but yes, your line above should work like that.

...which would need to be something like ;

``````if(Integer.signum(a) == -1){System.out.println(" a is negative");}
else{System.out.println("a is positive");}
``````
0
Commented:
Try:

if(a < 0){
System.out.println("The number given " + a + " is a negative number") ;
}

(While Integer.signum(a) == -1 may also be a fine solution, I think it's a bit of overkill, no?)

Doug
0
Commented:
I still haven't seen a clarification on whether 0 is to be considered positive.
0
Author Commented:
Yes. 0 is positive for my case.(which what in general i believe? please correct me if i am wrong)
0
Author Commented:
I was checking api
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

0
Commented:
the return type is int
0
Commented:
what is the return type of the signum()

int.

that should be obvious from the signature of the method.
0
Author Commented:
i was checking
http://codingbat.com/prob/p159227

solution seems complicated. Trying to write more simplified way.
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));
}
}

I tried like below
``````public boolean posNeg(int a, int b, boolean negative) {
if(Integer.signum(a)!=Integer.signum(b)){
return true;
}

if(Integer.signum(a)==-1 & Integer.signum(b)==-1 & negative==true){
return true;
}

return false;
}
``````

Failing test cases for
posNeg(-4, 5, true) → false      true      X
posNeg(1, -1, true) → false      true      X
posNeg(-1, 1, true) → false      true      X

0
Commented:
0 is NOT a negative value. Zero is one of three return values from Integer.signum() and should be treated as such.
0
Author Commented:
what is the easy simple readable way to write solution for this challenge?
0
Author Commented:
I see it
signum
public static int signum(int i)
Returns the signum function of the specified int value. (The return value is -1 if the specified value is negative; 0 if the specified value is zero; and 1 if the specified value is positive.)
Returns:
the signum function of the specified int value.
Since:
1.5
0
Commented:
You should take advantage of Java's inbuilt static methods to ensure reliability and avoid coding (simpler) functions of your own which could inevitably lead to errors. Using Integer.signum() is a way of parsing the truth. And using the ternary operator as I illustrated, is clear and pretty bulletproof.
0
Commented:
Returns the signum function of the specified int value

No if DOESNT return the signum function of the specified int - it returns one of 3 values as an int, telling you whether your argument is negative, positive or neither.
0
Commented:
If 0 is to be considered positive

if( (a^b)>=0 ){
System.out.println("a, b are both positive or both negative");
}
0
Full-stack Java DeveloperCommented:
I'm lost here on what you are trying to achieve.

Once again:

public void checkNumbers (int a,int b){
if (a>=0 && b>= 0){ System.out.println("both numbers positive";}
else {System.out.println("one of numbers negative";}
}
0
Commented:
for http://codingbat.com/prob/p159227
public boolean posNeg(int a, int b, boolean negative) {
return negative?a<0 && b<0:(a^b)<0;
}
0
Commented:
Or writing out the steps a bit more (you may find it easier to understand?):

public boolean posNeg(int a, int b, boolean negative) {
boolean aNeg = (a < 0) ;
boolean bNeg = (b < 0) ;

boolean ok = (aNeg && !bNeg) || (!aNeg && bNeg) ;

if (negative)
ok = aNeg && bNeg ;

return ok ;
}
0
Author Commented:
what is meaning of a^b

0
Author Commented:
``````public boolean posNeg(int a, int b, boolean negative) {
if(negative==true){
return (a<0&& b<0);
}
if((a>0&&b<0)||(a<0&&b>0)){
return true;
}
return false;
}
``````

I wrote code as above. I wonder how this is different from the solution in given in the link

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

0
Commented:
There seem to be differences in whitespace formatting, in the order of the or clauses, in using fallthrough instead of else, and in having an explicit return false, but the behaviour seems to be identical.
0
Commented:
^ is exclusive or.
The solution using ^ may behave differently from the solution given in the link when one of the values is 0 and the other is negative, but it is based on http:#a40340293 specifying that 0 is to be considered positive.
The link itself seems ambiguous on this, and the checks done from that link do not seem to consider such cases.
0
Author Commented:
in using fallthrough instead of else

Can you please elaborate on above point.
0
Author Commented:
I just saw the solution as below(earlier i have some typo)

``````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));
}
}
``````

when to use else and when to use fallthrough?
0
Author Commented:
``````and in having an explicit return false
``````

i thought explicit return is needed outside the if and else blocks. Is it is not needed?
0
Commented:
since the if clause will always exit with a return, using else here is mainly a matter of style.
0
Commented:

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

. . .  what are you trying to do here at all?
0
###### It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.