2017-05-03 1 views
0

Ich habe ein zweidimensionales Array und muss die Arrays innerhalb des Arrays vergleichen, um Ähnlichkeiten zwischen ihnen zu finden. Wenn ein Element in einem Array gefunden wird, wird ein Element zur Zählung hinzugefügt. Graf verfolgt Ähnlichkeiten. Wenn die Zählung die höchste ist, dann ist diese die ähnlichste. Es wird dann Drucken leer ist am ähnlichsten zu leer.Suche nach Ähnlichkeit innerhalb eines 2-dimensionalen Arrays

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); 
      } 

Dies ist die allgemeine Idee dahinter, was getan werden muss. Aber ich kämpfe mit dem richtigen Ergebnis und ich kann es nicht herausfinden. Das Ergebnis, das ich von diesem Code bin immer ist:

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 

Und das Ergebnis ich brauche, ist:

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

nur durch ungerade es etwas sucht ... Dein Zählvariable sieht man immer und daher auch Ihre maxCount, denn kurz bevor Sie es erhöhen, Sie setze es auf 0. – CCC

+0

@Jordan Ich habe die Position der Max- und Count-Variablen festgelegt. Jetzt werden sie zurückgesetzt, nachdem ein Array durchlaufen wurde. –

Antwort

-2
import java.util.Arrays; 

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

OP sucht nach Ähnlichkeit, nicht nach strikter Gleichheit. – lucasvw

0

Das Problem mit Ihrem Code ist, dass Sie die Zählung und die maxCount am Reset Gleichzeitig und auch wenn Sie die Anzahl erhöhen und sofort maxCount = count setzen, bewirkt dies, dass maxCount fast immer mit count übereinstimmt.

überprüfen Sie den folgenden Code und die Ergebnisse unter:

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); 
} 

Hinweis „count“ werden auf 0 unmittelbar vor dem Beginn der k-Schleife gesetzt, und der Vergleich geschieht direkt nach. Beachten Sie auch, dass "maxCount" außerhalb der Schleife auf 0 gesetzt wird, wobei count = 0 ist. Dadurch werden die folgenden Ergebnisse angezeigt, die gültig sind:

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 
Verwandte Themen