Solved

# comparing sign of a number in  java

Posted on 2014-09-23
218 Views
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.

0
Question by:gudii9
• 13
• 9
• 8
• +2

LVL 84

Expert Comment

Does 0 count as positive?
0

LVL 11

Expert Comment

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

LVL 84

Expert Comment

Are the integers small enough to be sure they won't overflow when multiplied?
0

LVL 26

Expert Comment

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

LVL 16

Accepted Solution

krakatoa earned 250 total points
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

LVL 16

Expert Comment

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

LVL 7

Author Comment

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

LVL 7

Author Comment

if(Integer.signum(a)==-1){
System.out.println("given number 'a' is a negative number");
}

0

LVL 11

Expert Comment

System.out.println (a.toString () + "is a negative number");
0

LVL 7

Author Comment

how to check below number a is negative or not in if condition using signum method?
if(Integer.signum(a)==-1){
0

LVL 16

Expert Comment

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

LVL 26

Expert Comment

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

LVL 84

Expert Comment

I still haven't seen a clarification on whether 0 is to be considered positive.
0

LVL 7

Author Comment

Yes. 0 is positive for my case.(which what in general i believe? please correct me if i am wrong)
0

LVL 7

Author Comment

I was checking api
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

0

LVL 84

Expert Comment

the return type is int
0

LVL 16

Expert Comment

what is the return type of the signum()

int.

that should be obvious from the signature of the method.
0

LVL 7

Author Comment

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

LVL 16

Expert Comment

0 is NOT a negative value. Zero is one of three return values from Integer.signum() and should be treated as such.
0

LVL 7

Author Comment

what is the easy simple readable way to write solution for this challenge?
0

LVL 7

Author Comment

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

LVL 16

Expert Comment

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

LVL 16

Expert Comment

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

LVL 84

Expert Comment

If 0 is to be considered positive

if( (a^b)>=0 ){
System.out.println("a, b are both positive or both negative");
}
0

LVL 11

Expert Comment

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

LVL 84

Expert Comment

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

LVL 26

Assisted Solution

dpearson earned 125 total points
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

LVL 7

Author Comment

what is meaning of a^b

0

LVL 7

Author Comment

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

LVL 84

Expert Comment

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

LVL 84

Assisted Solution

ozo earned 125 total points
^ 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

LVL 7

Author Comment

in using fallthrough instead of else

Can you please elaborate on above point.
0

LVL 7

Author Comment

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

LVL 7

Author Comment

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

LVL 84

Expert Comment

since the if clause will always exit with a return, using else here is mainly a matter of style.
0

LVL 16

Expert Comment

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

## Featured Post

When we want to run, execute or repeat a statement multiple times, a loop is necessary. This article covers the two types of loops in Python: the while loop and the for loop.
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the bâ€¦
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.