2017-04-08 70 views
0

我的程序運行正常,但它給出了錯誤的結果。我使用HashMap<Integer, ArrayList<Integer>>ArrayList<Integer>,我的程序會生成一個新的HashMap<integer, ArrayList<Integer>>。該程序必須將HashMap中的每個值與ArrayList中的值進行比較,並添加相似的值並將結果存儲在新的HashMap中。我添加了一張照片來幫助你理解。hashmap和arraylist中的相似值

algorithm

實施例:

ArrayList<Integer> : 
    [1, 0, 1, 0, 0] 
Hashmap<Integer,ArrayList<integer>> : 
    1, [1, 0, 1, 1, 0] 
    2, [0, 1, 1, 0, 0] 
    3, [0, 1, 1, 1, 0] 

結果:

HashMap 
    1, 4 
    2, 3 
    3, 2 

代碼:

System.out.println("HASHMAP SIMILIRATE RESULT:"); 
HashMap<Integer, Integer> sim = new HashMap<Integer, Integer>(); 

int count; 
int k = 1; 
for (Map.Entry<Integer, ArrayList<Integer>> e : hmm.entrySet()) { 
    count = 0; 

    //you can move this part to another method to avoid deep nested code 
    for (Integer mapValue : e.getValue()) { 
     if (mapValue.equals(listOperateur.get(k))) { 
      count = count + 1;   
     } 
    } 

    sim.put(e.getKey(), count); 
    k++; 
} 
+1

發佈您的代碼。 – stinepike

+0

@StinePike 對不起 – fatoma

+0

今天早些時候我試着幫助OP,但代碼太亂了,他的問題沒有任何意義。 –

回答

0
int k = 0; // initiate k with 0 
for (Map.Entry<Integer, ArrayList<Integer>> e : hmm.entrySet()) { 
    count = 0; 

    //you can move this part to another method to avoid deep nested code 
    for (Integer mapValue : e.getValue()) { 
     if (mapValue.equals(listOperateur.get(k++))) { 
      count = count + 1;   
     } 
    } 

    sim.put(e.getKey(), count); 
    k=0; 
} 
+0

不客氣:)。如果你覺得它有幫助,那麼你可以upvote的答案,並接受它 – stinepike

+0

確定愉快 – fatoma

+0

而最重要的是,我希望你已經明白你的錯在哪裏代碼 – stinepike