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.

Please advise.  Any sample code, resources highly appreciated. thanks in advance.
LVL 7
gudii9Asked:
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.

ozoCommented:
Does 0 count as positive?
0
Radek BaranowskiFull-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
ozoCommented:
Are the integers small enough to be sure they won't overflow when multiplied?
0
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

dpearsonCommented:
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
krakatoaCommented:
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

Your issues matter to us.

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

Start your 7-day free trial
krakatoaCommented:
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");

Open in new window

0
gudii9Author 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
gudii9Author Commented:
if(Integer.signum(a)==-1){
  System.out.println("given number 'a' is a negative number");
  }

I wrote as above which is not working. please advise
0
Radek BaranowskiFull-stack Java DeveloperCommented:
System.out.println (a.toString () + "is a negative number");
0
gudii9Author Commented:
how to check below number a is negative or not in if condition using signum method?
if(Integer.signum(a)==-1){
0
krakatoaCommented:
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");}

Open in new window

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

what is the return type of the signum() . Please advise
0
ozoCommented:
the return type is int
0
krakatoaCommented:
what is the return type of the signum()

int.

that should be obvious from the signature of the method.
0
gudii9Author 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;
}

Open in new window


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

please advise
0
krakatoaCommented:
0 is NOT a negative value. Zero is one of three return values from Integer.signum() and should be treated as such.
0
gudii9Author Commented:
what is the easy simple readable way to write solution for this challenge?
0
gudii9Author 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
krakatoaCommented:
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
krakatoaCommented:
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
ozoCommented:
If 0 is to be considered positive

if( (a^b)>=0 ){
   System.out.println("a, b are both positive or both negative");
}
0
Radek BaranowskiFull-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
ozoCommented:
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
dpearsonCommented:
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
gudii9Author Commented:
what is meaning of a^b

Please advise
0
gudii9Author 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;
}

Open in new window


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

Please advise
0
ozoCommented:
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
ozoCommented:
^ 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
gudii9Author Commented:
in using fallthrough instead of else

Can you please elaborate on above point.
0
gudii9Author 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));
  }
}

Open in new window


when to use else and when to use fallthrough?
please advise
0
gudii9Author Commented:
and in having an explicit return false

Open in new window


i thought explicit return is needed outside the if and else blocks. Is it is not needed?
When you need to have explicit return? please advise
0
ozoCommented:
since the if clause will always exit with a return, using else here is mainly a matter of style.
0
krakatoaCommented:
I can't help you any further because your question is beyond comprehension.

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

Open in new window


. . .  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.