I'm making a program that compares two text files and returns their similarity (based on a given algorithm). For each unique word in the first file, I want to find the probabilities that they occur in the second file. But whenever I run my program the similarity returned is always 0.0. This is what I have right now:
public static double nestedLoop(String[] doc1, String[] doc2) {
// nested loop: sort doc1, for each unique word in doc1, find all
// occurences in doc2 using a sequential search
java.util.Arrays.sort(doc1);
double similarity = 0.0;
for (int i = 0; i < doc1.length - 1; i++) {
if (doc1[i] != doc1[i + 1]) {
String unique = doc1[i];
double count = 0.0;
for (int j = 0; j < doc2.length; j++) {
if (unique == doc2[j]) {
count++;
similarity += count / doc2.length;
}
}
}
}
return similarity;
}
Can someone tell me what is going on?
1 Answer 1
if (unique == doc2[j]) {
should be
if (unique.equals(doc2[j])) {
Same for if (doc1[i] != doc1[i + 1]) {
should be:
if (!(doc1[i].equals(doc1[i + 1]))) {
String
comparison should always use equals()
instead of ==
(except case of String literal comparison)
Please read How do I compare strings in Java?
-
WOOOOOW I am stupid. I've definitely run into this before. I'll give it a try. Thanks!yiwei– yiwei2012年11月08日 18:41:53 +00:00Commented Nov 8, 2012 at 18:41
-
1actually, one more small question. If I have to use
equals()
forString
comparison, how come in the firstif
statement I can use the!=
to comparedoc1[i]
anddoc[i + 1]
? Aren't they alsoString
s?yiwei– yiwei2012年11月08日 18:49:39 +00:00Commented Nov 8, 2012 at 18:49 -
1@59eagle: Valid question, yes you need to use .equals() there also.kosa– kosa2012年11月08日 18:51:21 +00:00Commented Nov 8, 2012 at 18:51
-
@ColinD: Added clarification.kosa– kosa2012年11月08日 18:56:01 +00:00Commented Nov 8, 2012 at 18:56