Solved

comparing sign of a number in  java

Posted on 2014-09-23
36
218 Views
Last Modified: 2014-09-26
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.
0
Comment
Question by:gudii9
  • 13
  • 9
  • 8
  • +2
36 Comments
 
LVL 84

Expert Comment

by:ozo
Comment Utility
Does 0 count as positive?
0
 
LVL 11

Expert Comment

by:Radek Baranowski
Comment Utility
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

by:ozo
Comment Utility
Are the integers small enough to be sure they won't overflow when multiplied?
0
 
LVL 26

Expert Comment

by:dpearson
Comment Utility
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

by:
krakatoa earned 250 total points
Comment Utility
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

by:krakatoa
Comment Utility
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
 
LVL 7

Author Comment

by:gudii9
Comment Utility
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

by:gudii9
Comment Utility
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
 
LVL 11

Expert Comment

by:Radek Baranowski
Comment Utility
System.out.println (a.toString () + "is a negative number");
0
 
LVL 7

Author Comment

by:gudii9
Comment Utility
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

by:krakatoa
Comment Utility
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
 
LVL 26

Expert Comment

by:dpearson
Comment Utility
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

by:ozo
Comment Utility
I still haven't seen a clarification on whether 0 is to be considered positive.
0
 
LVL 7

Author Comment

by:gudii9
Comment Utility
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

by:gudii9
Comment Utility
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
 
LVL 84

Expert Comment

by:ozo
Comment Utility
the return type is int
0
 
LVL 16

Expert Comment

by:krakatoa
Comment Utility
what is the return type of the signum()

int.

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

Author Comment

by:gudii9
Comment Utility
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
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 
LVL 16

Expert Comment

by:krakatoa
Comment Utility
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

by:gudii9
Comment Utility
what is the easy simple readable way to write solution for this challenge?
0
 
LVL 7

Author Comment

by:gudii9
Comment Utility
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

by:krakatoa
Comment Utility
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

by:krakatoa
Comment Utility
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

by:ozo
Comment Utility
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

by:Radek Baranowski
Comment Utility
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

by:ozo
Comment Utility
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

by:dpearson
dpearson earned 125 total points
Comment Utility
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

by:gudii9
Comment Utility
what is meaning of a^b

Please advise
0
 
LVL 7

Author Comment

by:gudii9
Comment Utility
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
 
LVL 84

Expert Comment

by:ozo
Comment Utility
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

by:ozo
ozo earned 125 total points
Comment Utility
^ 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

by:gudii9
Comment Utility
in using fallthrough instead of else

Can you please elaborate on above point.
0
 
LVL 7

Author Comment

by:gudii9
Comment Utility
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
 
LVL 7

Author Comment

by:gudii9
Comment Utility
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
 
LVL 84

Expert Comment

by:ozo
Comment Utility
since the if clause will always exit with a return, using else here is mainly a matter of style.
0
 
LVL 16

Expert Comment

by:krakatoa
Comment Utility
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

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

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.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now