aspose file tools*
The moose likes Beginning Java and the fly likes Comparing Array Elements Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Comparing Array Elements" Watch "Comparing Array Elements" New topic
Author

Comparing Array Elements

Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
Hello, I am new to the forum and quite new to java. I appreciate all suggestions, feedback, or help in advance. Thanks.

The problems asks to compare two sorted arrays of integers, returning the number of values that are the same between the two. If there are duplicates, the array with the least amount will be counted. For example:

list1: (1, 2, 3, 3, 3, 3, 3, 5, 6, 7)
list2: (1, 1, 3, 3, 5, 9, 9)

numSame(list1, list2);

would return a total of 4 (1 once, 3 twice, and 5 once).

I am not allowed to use additional arrays or another structured object like an ArrayList. I'm not allowed to modify the arrays that are passed as parameters.

Here is what I have so far:



I am stuck right now on where to go from here. Any tip or guidance would be greatly appreciated. Thank you.

-Brandon
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 40052
    
  28
Welcome to JavaRanch

Pencil and paper, and a large eraser. That's what you need.

Write down in very simple terms how you intend to do this counting; that is called pseudocode. When you have got the pseudocode and you are sure it will work, then creating code will be very easy.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Welcome to the ranch!

Can you see where your current code is falling short? What should it be doing that it is not doing now?

Hint: It is finding that "1" is in both arrays, but it is missing "3". Do you see why?


"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer
sscce.org
Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
Thanks for the welcome. I'll try your recommendation and see if I can improve.
Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
Thanks for the welcome Marc. Yes, I can see why it does that. The method is only comparing the values of both arrays at the same element. I need to find a way to compare the element of one array with all the other elements of the second array. I'm reading through my book to see if I missed anything. Thanks for the guidance.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Brandon Peeples wrote:... I need to find a way to compare the element of one array with all the other elements of the second array...

That's exactly right! As Campbell said above, "Write down in very simple terms how you intend to do this counting..." It looks like you're well on your way.

Can you make your description even more specific? For example, get the first element from the first array, compare it to the first element of the second array, then compare it to the second element of the second arrary, then ... , unitl ___. This process will help you understand the logic and get you closer to what the code should look like.

Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
Wow you are so awesome Marc. I think I improved one more step. At least I hope so haha.

The problem now is getting rid of the duplicates. Once again I will rely on the trusty pencil, paper, eraser combo . Thanks again.
Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
I created another solution. I tried to change the value of j but i don't think it worked out right. Here is what I have at the moment.



I'm trying to change the value of "j" when the if statement is true so it won't duplicate next time, but it isn't working out right.

-Brandon

fred rosenberger
lowercase baba
Bartender

Joined: Oct 02, 2003
Posts: 11498
    
  16

just to throw a monkey wrench in, are you guaranteed that the arrays will be sorted? that can make a difference in how you approach it...


There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors
Misha van Tol
Ranch Hand

Joined: Jan 02, 2010
Posts: 56

Nice assignment, at first it looks simple but it's turns out to be more complicated when you try to find the solution. If you (OP) have the solution do post it. I think I've got a nice solution but I'm curious to see how others would approach it.

By the way, if you're looping through an array you can use a enhanced for which can come in handy here I think.
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/for.html
Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
@fred Yes, they are always sorted.

@Misha The enhanced for is pretty awesome. Thanks. Unfortunately I can't use that since we haven't learned that in class. I appreciate the link though. I haven't figured a solution yet.
Misha van Tol
Ranch Hand

Joined: Jan 02, 2010
Posts: 56

A normal for-loop will do the job too. Before starting to program you already need to know the solution of the problem. They probably teach you to make a flow-chart first. But you can also use normal sentences to work with the problem like this:

- loop through list1 and for each element in it:
- loop through list 2 and compare each element with the element from list1
- if they're equal increase a counter, stop 2nd loop and know that you don't have to check this element from list2 anymore
(nor the previous elements).

Good luck!
Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
I think I created the right solution. Here is the final code:



What I did different was change the value of "j" if the elements matched so it wouldn't match again. I also added a break to stop the loop. I am a super newbie to programming. I appreciate all the advice and guidance. It was great to finally finish the problem. Thanks guys. You are all great
James Tharakan
Ranch Hand

Joined: Aug 29, 2008
Posts: 580

what if the value in the array are like this..
int[] list1 = {1, 10000, 1, 1, 2, 2, 3, 4, 5, 8, 12};
int[] list2 = {1, 1, 3, 3, 3, 3, 6, 6, 7, 7, 8, 9, 10, 11};


SCJP 6
Why to worry about things in which we dont have control, Why to worry about things in which we have control ! !
Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
Good point haha. Maybe this is better. I hope...

list2[j] -= list2[j]; instead of list[j] += 9999;

Thanks for the recommendation of removing that weird 9999.
James Tharakan
Ranch Hand

Joined: Aug 29, 2008
Posts: 580

what is zero is there???

what if the value in the array are like this..
int[] list1 = {1, 10000, 0, 1, 2, 2, 3, 4, 5, 8, 12};
int[] list2 = {1, 1, 3, 3, 3, 3, 6, 6, 7, 7, 8, 9, 10, 11};


i this you should find another logic !!
Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
Hmmmm... What about converting the element to a double? Since all of the numbers in the array have to be type int.

list2[j] *= 0.00;
James Tharakan
Ranch Hand

Joined: Aug 29, 2008
Posts: 580

well i am not complete sure of the actual problem statement...
and about your solution ... you cannot write a double in to a int array !!!
Misha van Tol
Ranch Hand

Joined: Jan 02, 2010
Posts: 56

James Tharakan wrote:what if the value in the array are like this..
int[] list1 = {1, 10000, 1, 1, 2, 2, 3, 4, 5, 8, 12};
int[] list2 = {1, 1, 3, 3, 3, 3, 6, 6, 7, 7, 8, 9, 10, 11};
...
what if the value in the array are like this..
int[] list1 = {1, 10000, 0, 1, 2, 2, 3, 4, 5, 8, 12};
int[] list2 = {1, 1, 3, 3, 3, 3, 6, 6, 7, 7, 8, 9, 10, 11};


Since the array's are always sorted the order would be different. Which doesn't mean using an arbitrary high value is the right approach. Just think over what you are doing here, you don't need to check the value in list2 anymore so you set it to '9999'. When continuing with the program you keep comparing items from list1 with all those '9999' values when you already know they don't match. Why bother comparing them?
Brandon Peeples
Ranch Hand

Joined: Jan 06, 2010
Posts: 38
I'll give it a try. Thanks for the suggestion! I tried to think of a way to make it not check an element again if it matched, but I couldn't think of anything. I found another way to make it work though. Here is my updated code:



I tried to take advantage of knowing that the array lists are from least to greatest. If any element values matched, the element value from the second list would decrease the first match by 1. Then all other matching elements would get the decreased first match value. Therefore, duplicates cannot be matched because it is from least to greatest.
 
 
subject: Comparing Array Elements