2017-05-03 6 views
0

2次元配列を持ち、配列内の配列を比較してそれらの類似点を見つける必要があります。 1つの配列に1つの項目があり、別の項目に1つの項目がある場合は、その項目に1つの項目が追加されます。カウントは類似点を追跡します。カウントがこれまでの最高値であれば、それは最も類似していると見なされます。ブランクは、ブランクに最もよく似ています。2次元配列内での類似性の発見

double[][] ratingDB = {{4.0, 3.0, 3.0, 3.0, 3.0}, {3.0, 2.0, 3.0, 3.5, 3.0}, 
      {4.0, 3.0, 4.0, 3.0, 3.0}, {3.0, 2.0, 3.0, 3.5, 3.0}, {3.0, 2.0, 3.0, 3.5, 3.0}}; 
String temp = null; 

      for (int i = 0; i < ratingDB.length; i++) { 
       for (int j = 1; j < ratingDB.length; j++) { 
          int maxCount = 0; 
          int count = 0; 
        for (int k = 0; k < ratingDB.length-1; k++) { 
         if (ratingDB[i][k] == ratingDB[j][k]) { 
          count++; 
          if (count >= maxCount) { 
           maxCount = count; 
           temp = "User_" + k; 
          } 
         } 
        } 
       } 
       System.out.println("User_" + i + " is most simlar to " + temp); 
      } 

これは一般的な考え方です。しかし、私は適切な結果を得るためにstruglingだと私はそれを把握することはできません。

User_0 is most simlar to User_2 
User_1 is most simlar to User_3 
User_2 is most simlar to User_3 
User_3 is most simlar to User_3 
User_4 is most simlar to User_3 

そして、私は必要な結果は次のとおりです:私はこのコードから取得していた結果ではある

user_0 most similar to user_2 
user_1 most similar to user_4 
user_2 most similar to user_0 
user_3 most similar to user_4 
user_4 most similar to user_3 
+0

を0に設定してください。 – CCC

+0

@Jordan max変数とcount変数の位置を修正しました。今度は、配列が反復された後にリセットされます。 –

答えて

-2
import java.util.Arrays; 

int[][] arr1; 
int[][] arr2; 
//... 
if (Arrays.deepEquals(arr1, arr2)) 
+1

OPは厳密な平等ではなく、類似点を探しています。 – lucasvw

0

あなたのコードの問題は、あなたがでカウント数とMAXCOUNTをリセットすることです同じ時間にカウントし、カウントを増やしてすぐにmaxCount = countを設定すると、maxCountはcountとほとんど同じになります。

次のコードチェックアウトし、以下の結果:

double[][] ratingDB = { 
     {4.0, 3.0, 3.0, 3.0, 3.0}, 
     {3.0, 2.0, 3.0, 3.5, 3.0}, 
     {4.0, 3.0, 4.0, 3.0, 3.0}, 
     {3.0, 2.0, 3.0, 3.5, 3.0}, 
     {3.0, 2.0, 3.0, 3.5, 3.0}}; 

int height = ratingDB.length; 
int width = ratingDB[0].length;; 
for (int i = 0; i < height; i++) { 
    int maxCount = 0; 
    int temp = -1; 
    for (int j = 0; j < height; j++) { 
     int count = 0; 
     for (int k = 0; k < width; k++) { 
      if (ratingDB[i][k] == ratingDB[j][k] && i != j) { 
       count++; 
      } 
     } 
     if (count > maxCount) { 
      maxCount = count; 
      temp = j; 
     } 
    } 

    System.out.println("User_" + i + " is most similar to User_" + temp); 
} 

注「カウントが」右のkループの開始前に0に設定され、比較が右後に発生されます。また、 "maxCount"は、count = 0のループの外側で0に設定されていることにも注意してください。 これが有効で、次の結果、返されます:あなたは、あなたがそれをインクリメントする直前ため...あなたのカウント変数は常に、あまりにも1ので、あなたのMAXCOUNTになります奇妙に見えるちょうどそれで何かを見ることで

User_0 is most similar to User_2 
User_1 is most similar to User_3 
User_2 is most similar to User_0 
User_3 is most similar to User_1 
User_4 is most similar to User_1