2017-05-03 35 views
0

我有一個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); 
      } 

這是需要完成的一般想法。然而,我正在努力獲得正確的結果,我無法弄清楚。我從這個代碼得到的結果是:

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

看起來很奇怪...您的計數變量將永遠是一個,因此你也MAXCOUNT,因爲你增加它之前,你將它設置爲0. – CCC

+0

@Jordan我修復了最大值和計數變量的位置。現在他們在數組迭代完成後重置。 –

回答

-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,比較之後發生的。另外請注意,在count = 0的循環外部,「maxCount」被設置爲0。 這將返回下面的結果,這是有效的:只要看看它的東西

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