largest of given three integers

Hi,

I am working on below challenge

http://codingbat.com/prob/p101887

I wrote as below

public int intMax(int a, int b, int c) {
if(a>b)
{
int minValue=Math.min(a,b);
return a;
}

if(a>c)
{
int minValue=Math.min(a,c);
return a;
}


if(b>c)
{
int minValue=Math.min(b,c);
return b;
}
return c;
  
}

Open in new window


I have two test cases failing. Please advise on how to fix and effective way to write this code.


Expected      Run            
intMax(1, 2, 3) → 3      3      OK         
intMax(1, 3, 2) → 3      3      OK         
intMax(3, 2, 1) → 3      3      OK         
intMax(9, 3, 3) → 9      9      OK         
intMax(3, 9, 3) → 9      9      OK         
intMax(3, 3, 9) → 9      9      OK         
intMax(8, 2, 3) → 8      8      OK         
intMax(-3, -1, -2) → -1      -1      OK         
intMax(6, 2, 5) → 6      6      OK         
intMax(5, 6, 2) → 6      5      X         
intMax(5, 2, 6) → 6      5      X
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.

AnthonyHamonCommented:
The logic you need to apply is:

if a > b and a > c then return a
if b > c then return b else return c
0
gudii9Author Commented:
No need of covering below scenario?

if c> a then return c else return a
0
AnthonyHamonCommented:
That scenario is covered.  Try it with your test data to validate.
0
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

gudii9Author Commented:
public int intMax(int a, int b, int c) {

  
if((a>b)&(a>c))
		{
		//int minValue=Math.min(a,b);
		return a;
		}

		if(b>c)
		{
		//int minValue=Math.min(a,c);
		return b;
		}

return 0;
		/*if(b>c)
		{
		int minValue=Math.min(b,c);
		return b;
		}
		return c;
		  
		}*/

}

Open in new window


I tried as above


still failing for few cases

Expected      Run            
intMax(1, 2, 3) → 3      0      X         
intMax(1, 3, 2) → 3      3      OK         
intMax(3, 2, 1) → 3      3      OK         
intMax(9, 3, 3) → 9      9      OK         
intMax(3, 9, 3) → 9      9      OK         
intMax(3, 3, 9) → 9      0      X         
intMax(8, 2, 3) → 8      8      OK         
intMax(-3, -1, -2) → -1      -1      OK         
intMax(6, 2, 5) → 6      6      OK         
intMax(5, 6, 2) → 6      6      OK         
intMax(5, 2, 6) → 6      0      X         
Correct for more than half the tests

complete code is

public class Test4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int largeValue=intMax(5,6,2);
		System.out.println("largeValue is--->"+largeValue);

	}
	
	
	public static int intMax(int a, int b, int c) {
		if((a>b)&(a>c))
		{
		//int minValue=Math.min(a,b);
		return a;
		}

		if(b>c)
		{
		//int minValue=Math.min(a,c);
		return b;
		}

return 0;
		/*if(b>c)
		{
		int minValue=Math.min(b,c);
		return b;
		}
		return c;
		  
		}*/

}
}

Open in new window

0
TommySzalapskiCommented:
You want &&, not & (although it will do the right thing in this case, it's not the same thing in all cases).

You should not return 0 there. If a>b && a>c was false and b > c was also false, you return 0. What should you return there instead?
0
AnthonyHamonCommented:
You have a 'return 0;' statement in your code which should be 'return c;'  The final 'if' block is remarked out - you can remove this completely if you wish.
0
Amitkumar PSr. ConsultantCommented:
Below is the simplest one with the help of Math.max().

public int intMax(int a, int b, int c) {
  return Math.max(Math.max(a,b),c);
}

Open in new window

0
gudii9Author Commented:
Let us say if i have 10 given int numbers (instead of 3 in this case) can i find the largest of the 10 using Math.max function. Please advise
0
ozoCommented:
You can do it with nine applications of the Math.max function.
0
gudii9Author Commented:
You can do it with nine applications of the Math.max function.

you mean nine separate java apllications. Like nine different java main programs. Please advise
0
Amitkumar PSr. ConsultantCommented:
Let us say if i have 10 given int numbers (instead of 3 in this case) can i find the largest of the 10 using Math.max function. Please advise

try the below out:

int[] values = {12,45,23,67,45,86,43,67,98,5,45,345,67,89,34,56};
int maxval = values[0];
for (int ind=1; ind < values.length; ind++) {
    maxval=Math.max(maxval, values[ind]);
}
System.out.println("Max Value : " + maxval);
0
zzynxSoftware engineerCommented:
>> you mean nine separate java apllications. Like nine different java main programs. Please advise
No, of course not!

What was meant was this:

public int intMax(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int p9, int p10) {
  return Math.max(Math.max(Math.max(Math.max(Math.max(Math.max(Math.max(Math.max(Math.max(p1,p2),p3), p4),p5),p6),p7),p8),p9),p10);
}

Open in new window


Which looks (and is) ridiculous, but works. ;-)
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 class Test6 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] values = {12,45,23,67,45,86,43,67,98,5,45,345,67,89,34,56}; 
		int maxval = values[0];
		for (int ind=1; ind < values.length; ind++) {
		    maxval=Math.max(maxval, values[ind]);
		}
		System.out.println("Max Value : " + maxval);

	}
	
	
	

}

Open in new window


above code returned 345 which is correct
0
gudii9Author Commented:
public class Test7 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int largeValue=intMax(5,6,8);
		System.out.println("largeValue is--->"+largeValue);

	}
	
	
	public static int intMax(int a, int b, int c) {
		if((a>b)&&(a>c))
		{
		//int minValue=Math.min(a,b);
		return a;
		}

		if(b>c)
		{
		//int minValue=Math.min(a,c);
		return b;
		}

return c;
		

}
}

Open in new window


above also returned 8
0
ozoCommented:
Those results are not unexpected.
Did you have reason to think it would do something different?
0
gudii9Author Commented:
That scenario is covered.  Try it with your test data to validate.

Open in new window

i validated with test data and works fine. But i did not understand how that scenario is covered. Please advise
0
gudii9Author Commented:
Those results are not unexpected.
Did you have reason to think it would do something different?

I agree. The results are correct and expected only.
0
ozoCommented:
if you are referring to the scenario  c> a,
it was covered only when a<=b, otherwise your initial if(a>b)
would have immediately returned a
but instead of returning a, you could have returned Math.max(a,c);
0
zzynxSoftware engineerCommented:
>> i did not understand how that scenario is covered. Please advise
Which scenario?

If you read your code - which I commented - you simply see that it covers all scenario's:

public static int intMax(int a, int b, int c) {
   if ((a>b)&&(a>c)) { // a is bigger than b and bigger than c...
     return a; // ...so return it
  }
  // If you're here, you already know that a is not the biggest one, so let's focus on b and c
  if (b>c) { // b is bigger than c...
    return b; // ... so return b
  }
  // if you're here, you know that a is not the biggest, b is not the biggest, so...
  return c; // c must be the biggest. Well, return it.
}

Open in new window


Maybe it's even more clear when you write it with some more else's like this:

public static int intMax(int a, int b, int c) {
  if ((a>b)&&(a>c)) {
     return a;
  } else  if (b>c) {
    return b;
  } else {
    return c;
  }
}

Open in new window

0
ozoCommented:
I agree if you are referring to the code in http:#a40364357, but the question of http:#a40364184 was posted prior to that code, so wouldn't it have been referring to the code in http:#questionViewInlineCode10-28532206-1 ?
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.