Solved

# largest of given three integers

Posted on 2014-10-06
107 Views
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;

}
``````

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
0
Question by:gudii9
• 8
• 4
• 3
• +3

LVL 4

Expert Comment

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

LVL 7

Author Comment

No need of covering below scenario?

if c> a then return c else return a
0

LVL 4

Expert Comment

That scenario is covered.  Try it with your test data to validate.
0

LVL 7

Author Comment

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

}*/

}
``````

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;

}*/

}
}
``````
0

LVL 37

Assisted Solution

TommySzalapski earned 100 total points
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

LVL 4

Assisted Solution

AnthonyHamon earned 100 total points
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

LVL 20

Expert Comment

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);
}
``````
0

LVL 7

Author Comment

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

LVL 84

Expert Comment

You can do it with nine applications of the Math.max function.
0

LVL 7

Author Comment

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

LVL 20

Assisted Solution

Amitkumar Panchal earned 100 total points
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

LVL 37

Accepted Solution

zzynx earned 100 total points
>> you mean nine separate java apllications. Like nine different java main programs. Please advise
No, of course not!

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

Which looks (and is) ridiculous, but works. ;-)
0

LVL 7

Author Comment

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

}

}
``````

above code returned 345 which is correct
0

LVL 7

Author Comment

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

}
}
``````

above also returned 8
0

LVL 84

Expert Comment

Those results are not unexpected.
Did you have reason to think it would do something different?
0

LVL 7

Author Comment

``````That scenario is covered.  Try it with your test data to validate.
``````
i validated with test data and works fine. But i did not understand how that scenario is covered. Please advise
0

LVL 7

Author Comment

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

LVL 84

Expert Comment

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

LVL 37

Expert Comment

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

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

LVL 84

Assisted Solution

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

## Featured Post

### Suggested Solutions

bunnyEars2 challenge 6 66
@SBGen Method 3 25
Java array passed to SQL where clause 23 39
JList custom Cell Renderer refresh 15 39
This article will show, step by step, how to integrate R code into a R Sweave document
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.