programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
• Campbell Ritchie
• Paul Clapham
• Ron McLeod
• Liutauras Vilda
• Bear Bibeault
Sheriffs:
• Jeanne Boyarsky
• Tim Cooke
• Devaka Cooray
Saloon Keepers:
• Tim Moores
• Tim Holloway
• Piet Souris
• salvin francis
• Stephan van Hulst
Bartenders:
• Frits Walraven
• Carey Brown
• Jj Roberts

# Also Need Help Verifying this method works

Ranch Hand
Posts: 76
This is not passing the JUnit test cases for some reason. Can anyone tell me why? The JUnit test cases code is below as well. This might actually help with my other post too.

JUnit stuff....

Rancher
Posts: 1043
6
> Can anyone tell me why?

Because it is broken.

A hint: what does yield for the array (2,1)?

Ivan Jozsef Balazs
Rancher
Posts: 1043
6

A hint: if the largest element comes first, then the "if" condition holds at its first execution, but never again.

Marshal
Posts: 71097
292
Welcome to the Ranch
If you can’t solve Ivan Jozsef Balazs’s hint, try writing a few numbers and the values of high1 and high2 after each iteration of the loop.

William Koch
Ranch Hand
Posts: 76
Thanks a bunch. I saw the point you all were making but I had to think a few minutes in order to figure out how to fix the problem. I decided to just take into account the different possibilities. Here is my solution :

Thanks again!

Sheriff
Posts: 15996
265
If the list had fewer than 2 elements in it, would it still be valid to say there is a second biggest value? It looks like your solution would return Integer.MIN_VALUE even though it isn't an element of the list.

Bartender
Posts: 10777
71

William Koch wrote:Here is my solution :...

Seems like you have a redundant check in there. How do you think you might shorten it?

Winston

William Koch
Ranch Hand
Posts: 76
@Winston

I am actually not sure. I am not sure. It was an assignment for school so now that I have it working I don't want to mess with it too much currently but I would imagine it has to do with eliminating the first of second else if statement. What would you suggest? I just had a ton of trouble getting it to work yesterday so I did not want to change anything once I got it working but I would love to become more efficient!

@Junilu

Here are the test cases that we were given

{1,2}, // 1
{4,3}, // 3
{6,6}, // 6
{1,2,3,4,5}, // 4
{5,4,3,2,1}, // 4
{5,5,4,4,4}, // 5 (not 4!)
{1,5,5,5,1}, // 5
{1,5,3,-13}, // 3
{-9,-9,-9,0,8,-9}, // 0
{-9,8,-9,0,-9,-9}, // 0
{-900,-50,-15,-32,1000,-22}, // -15
{-999999999,-999999992,-999999998,-999999990}, // -999999992
{Integer.MIN_VALUE,Integer.MAX_VALUE,Integer.MIN_VALUE}

Junilu Lacar
Sheriff
Posts: 15996
265

Winston Gutkowski wrote:Seems like you have a redundant check in there. How do you think you might shorten it?

I don't see a redundant check. Did you mean two conditionals that result in the same action? The two are not redundant though.

Junilu Lacar
Sheriff
Posts: 15996
265

William Koch wrote:It was an assignment for school so now that I have it working...

Does it work correctly if you have a list like {5} or an empty list? For the 1-element list or the empty list, is it correct to return Integer.MIN_VALUE for the second biggest?

Bartender
Posts: 6109
6

Junilu Lacar wrote:If the list had fewer than 2 elements in it, would it still be valid to say there is a second biggest value? It looks like your solution would return Integer.MIN_VALUE even though it isn't an element of the list.

In the absence of specific instructions on how to handle that situation, I would say yes. As Paul Clapham pointed out in a similar thread a few months back, Integer.MIN_VALUE is the identity element for the max() function on ints.

Campbell Ritchie
Marshal
Posts: 71097
292
Now it does!

Junilu Lacar
Sheriff
Posts: 15996
265
Besides asking for specifics, I would probably choose to throw an IllegalArgumentException instead with a message that the argument should have at least two elements -- it's a step further back from violating the Principle of Least Surprise than returning a value that's not actually a part of the list.

@Campbell - JavaDocs are a poor substitute

Winston Gutkowski
Bartender
Posts: 10777
71

Junilu Lacar wrote:I don't see a redundant check. Did you mean two conditionals that result in the same action? The two are not redundant though.

Actually, they are. If you are already "rolling" biggest and second when you find a "new" biggest, then the check for
if (num == biggest)
is redundant, since it will always be satisfied by
if (num > second)
since either both will be equal (in which case you don't care about a 3rd number == biggest), or biggest will be > second; in which case a new number == biggest must be > second.

Winston

William Koch
Ranch Hand
Posts: 76
The assignment assumed that there were at least 2 Integer elements in the list.

Winston Gutkowski
Bartender
Posts: 10777
71
Winston Gutkowski,
Your post was moved to a new topic.
Split from https://coderanch.com/forums/posts/list/40/593650

Winston Gutkowski
Bartender
Posts: 10777
71

William Koch wrote:The assignment assumed that there were at least 2 Integer elements in the list.

@William: I've split off the rest of this discussion into a separate thread, since we kind of rambled off into never-never land.

You can now carry on unencumbered.

Winston

 If somebody says you look familiar, tell them you are in porn. Or in these tiny ads: the value of filler advertising in 2020 https://coderanch.com/t/730886/filler-advertising