int in the range of 30 to 50 challenge

Hi,

I was working on the int in the range of 30 to 50 challenge


http://codingbat.com/prob/p132134


I wrote code like below
public boolean in3050(int a, int b) {

if((Math.abs(a-30)>=10 &&Math.abs(b-30)>=10)  || (Math.abs(a-40)>=10&& Math.abs(b-40)>=10))
{
return true;
}

if((Math.abs(a-40)>=10 && Math.abs(b-40)>=10) || (Math.abs(a-50)>=10 && Math.abs(b-50)>=10))
{
return true;
}
  return false;
}

Open in new window

I have couple of test cases failing as below

Expected      Run            
in3050(30, 31) → true      true      OK         
in3050(30, 41) → false      false      OK         
in3050(40, 50) → true      true      OK         
in3050(40, 51) → false      true      X         
in3050(39, 50) → false      false      OK         
in3050(50, 39) → false      false      OK         
in3050(40, 39) → true      true      OK         
in3050(49, 48) → true      true      OK         
in3050(50, 40) → true      true      OK         
in3050(50, 51) → false      true      X         
in3050(35, 36) → true      true      OK         
in3050(35, 45) → false      false      OK         
Correct for more than half the tests


How to fix and improve my program. Please advise
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:
Look at how your code is handling the not OK cases, and see if you can figure out why it is getting the wrong answer.

You may also want to think about how you are doing the range 30..40 inclusive and range 40..50 inclusive tests
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
gudii9Author Commented:
public boolean in3050(int a, int b) {

if((Math.abs(a-30)>=10 &&Math.abs(b-30)>=10)  || (Math.abs(a-40)>=10&& Math.abs(b-40)>=10))
{
return true;
}

if((Math.abs(a-40)>=10 && Math.abs(b-40)>=10) || (Math.abs(a-50)>=10 && Math.abs(b-50)>=10))
{
return true;
}

if((a-50)>=1 && (b-50)>=1)
{
return false;
}
return false;

}

Open in new window


I think i improved my code bit still 2 failing

Expected      Run            
in3050(30, 31) → true      true      OK         
in3050(30, 41) → false      false      OK         
in3050(40, 50) → true      true      OK         
in3050(40, 51) → false      true      X         
in3050(39, 50) → false      false      OK         
in3050(50, 39) → false      false      OK         
in3050(40, 39) → true      true      OK         
in3050(49, 48) → true      true      OK         
in3050(50, 40) → true      true      OK         
in3050(50, 51) → false      true      X         
in3050(35, 36) → true      true      OK         
in3050(35, 45) → false      false      OK
0
ozoCommented:
Think more carefully about what in the range 30..40 inclusive means, and what Math.abs(a-30)>=10 means
0
Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

dpearsonCommented:
Along the same lines as ozo is saying,

What does:

Math.abs(a-30)>=10

return for "a = 25"?

And is this what you want?

Doug
0
gudii9Author Commented:
thinking. Why thinking is takes time. why it is not spontaneous yet with java language unlike english language?
0
gudii9Author Commented:
in the mind i have answer but to teach computer to understand is bit hard for me
0
dpearsonCommented:
Don't worry that it takes time.  It will all get faster with practice.

Everyone is slow when they start out.

Doug
0
gudii9Author Commented:
public class Test9 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		in3050(40,51);
	}

	
	public static boolean in3050(int a, int b) {

		if((Math.abs(a-30)<=10 &&Math.abs(b-30)<=10)  || (Math.abs(a-40)<=10&& Math.abs(b-40)<=10))
		{
		return true;
		}

		if((Math.abs(a-40)<=10 && Math.abs(b-40)<=10) || (Math.abs(a-50)<=10 && Math.abs(b-50)<=10))
		{
		return true;
		}

		if((a-50)>0 && (b-50)>0)
		{
		return false;
		}
		return false;

		}
}

Open in new window


tried as above but still not working. WIll modify more
0
ozoCommented:
Think more carefully about what in the range 30..40 inclusive means, and what Math.abs(a-40)<=10 means
Think about what happens when a is 29, 30, 31, 39, 40, 41

Another hint:  How would you test for in the range -10..10?
0
zzynxSoftware engineerCommented:
>> why it is not spontaneous yet with java language unlike english language?
I think that's because you use the method Math.abs()
I wonder why you use it for this challenge?

Let's do it in English:
Checking if an int x is in the range 30...40 is just as simple as
1) checking that x is 30 or more
but ALSO
2) checking that x is no more than 40, thus 40 or less

In java
1) x >= 30
AND
2) x <= 40

Hence, checking if an int x is in the range 30...40 is just as simple as:

if ( x>=30 && x<=40) {
}

You have to check if both a and b are in the range 30..40, so that just doubling what you already had above:
if ( (a>=30 && a<=40) && (b>=30 && b<=40) ) {
}

And you have to check it for another range: 40...50, so that's replacing 30 by 40 and 40 by 50:
if ( (a>=40 && a<=50) && (b>=40 && b<=50) ) {
}

So the eventual result is:

public boolean in3050(int a, int b) {
      if ( (a>=30 && a<=40) && (b>=30 && b<=40) ) { // a and b in the range 30...40?
         return true; // Yes!
      }

      if ( (a>=40 && a<=50) && (b>=40 && b<=50) ) { // a and b in the range 40...50?
         return true; // Yes!
      }

      return false; // no succes (otherwhise, we shouldn't have come till here)
}

Open in new window

0
gudii9Author Commented:
Above solution works great.. in my mind i was struck with one direction of Math.abs for this challenge. How to keep mind working  thinking on all different directions and possibilities.
0
ozoCommented:
For what range of numbers  is Math.abs(a-40)<=10 true?
0
gudii9Author Commented:
both sides of 40 ie 30-50 since -10 also considered as 10 with abs
0
ozoCommented:
Yes.  So can you see how to modify 30-50 to 30-40?
0
gudii9Author Commented:
public class Test8 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
    boolean b=in3050(30, 51);
    System.out.println("b is-->"+b);
	}

	
	public static boolean in3050(int a, int b) {
	      if ( a>=30 && a<=40 && b>=30 && b<=40 ) { // a and b in the range 30...40?
	         return true; // Yes!
	      }

	      if ( a>=40 && a<=50 && b>=40 && b<=50 ) { // a and b in the range 40...50?
	         return true; // Yes!
	      }

	      return false; // no succes (otherwhise, we shouldn't have come till here)
	}
}

Open in new window


Even if i remove the inner brackets I still get same results.

Instead of

  if ( (a>=30 && a<=40) &&( b>=30 && b<=40) )
changed as below

  if ( a>=30 && a<=40 && b>=30 && b<=40 )

So no need of inner extra brackets right?
Please advise
0
ozoCommented:
In java, comparisons have precedence over boolean operators,

but I was asking whether you could figure out if
30-50 corresponds to Math.abs(a-40)<=10
then
30-40 corresponds to what?
0
gudii9Author Commented:
(a-35)<=5
which adds 5 on both sides of 35
0
ozoCommented:
Correct, Math.abs(a-35)<=5 would test for the range 30..40
0
zzynxSoftware engineerCommented:
>> Above solution works great..
Then why didn't you give it any points?
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.