Explorar o código

Merge branch 'hoxfix-coverage' into 'DEV'

fix coverage



See merge request !468

梅杰 %!s(int64=7) %!d(string=hai) anos
pai
achega
60b65d8a14

+ 11 - 9
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/SimilarityLogicImpl.java

@@ -38,11 +38,11 @@ public class SimilarityLogicImpl implements SimilarityLogic{
         if(usersVector == null) {
             return result;
         }
-        Long[] ids = (Long[])usersVector.keySet().toArray();
+        Object[] ids = usersVector.keySet().toArray();
         for(int i=0; i<usersVector.size(); i++) {
             for(int j = i+1; j<usersVector.size(); j++) {
-                long userId1 = ids[i];
-                long userId2 = ids[j];
+                long userId1 = (Long)ids[i];
+                long userId2 = (Long)ids[j];
                 double tempSimilarity = getSimilarity(usersVector.get(userId1), usersVector.get(userId2));
                 result.add(new SimilarityResultVO(null,null,userId1, userId2, tempSimilarity));
             }
@@ -69,12 +69,11 @@ public class SimilarityLogicImpl implements SimilarityLogic{
         }
         int[] userVector = usersVector.get(userId);
         for(Long id: usersVector.keySet()) {
-            if(id.equals(caseId)) {
-                continue;
+            if(!id.equals(userId)) {
+                double tempSimilarity = getSimilarity(userVector, usersVector.get(id));
+                SimilarityResultVO similarityResultVO =  new SimilarityResultVO(null, null, caseId, id, tempSimilarity);
+                result.add(similarityResultVO);
             }
-            double tempSimilarity = getSimilarity(userVector, usersVector.get(id));
-            SimilarityResultVO similarityResultVO =  new SimilarityResultVO(null, null, caseId, id, tempSimilarity);
-            result.add(similarityResultVO);
         }
         Ordering ordering =  Ordering.natural();
         result = ordering.greatestOf(result,10 );
@@ -138,6 +137,9 @@ public class SimilarityLogicImpl implements SimilarityLogic{
     }
 
     private double getSimilarity(int[] vector1, int[] vector2) {
+        if(vector1 == null || vector2 == null) {
+            return 0;
+        }
         int size = vector1.length;
         double result = 0;
         int index = 0;
@@ -145,7 +147,7 @@ public class SimilarityLogicImpl implements SimilarityLogic{
             result += vector1[index]^vector2[index];
             index++;
         }
-        result = result/size;
+        result = 1 - result/size;
         return result;
     }