2012-01-20 72 views
0

如何在每次運行此循環時使用我目前設置的所有元素只映射到映射的方式在此情況下將鍵[i]增加1爲1.我試圖找出每個數字出現多少次。我在list.get(i)之後的空點上嘗試了+1,但是隻是將每個元素映射爲1.謝謝。嘗試使用Hashmap <Integer,Integer>

List<Integer> list = new ArrayList<Integer>(); 
    HashMap<Integer,Integer> Mode = new HashMap<Integer, Integer>(); 
    for (int i = 0; i < arr.length; i++) { 
     for (int j = 0; j < arr[i].length; j++) { 
      list.add(arr[i][j]); 
     } 
    } 
    System.out.println(list); 
    int count = 1; 
    for(int i = 0; i < list.size(); i ++) { 
     Mode.put(list.get(i),); 
+0

int count = 1可以忽略! – Kristopher

+0

你的問題不是很理解,但評論是好的 – Kushan

+0

哈哈對不起,從10AM MT時間開始就對這些作業感到抱歉,謝謝你的幫助,我真的很感激它 – Kristopher

回答

1

如果可以選擇,你會發現它更容易使用類似MultisetGuava

Multiset<Integer> seen = HashMultiset.create(); 
for (int[] row : arr) { 
    for (int elem : row) { 
    seen.add(elem); // none of that nasty dealing with the Map 
    } 
} 
// you can look up the count of an element with seen.count(elem) 
E mostCommon = null; 
int highestCount = 0; 
for (Multiset.Entry<Integer> entry : seen.entrySet()) { 
    if (entry.getCount() > highestCount) { 
    mostCommon = entry.getElement(); 
    highestCount = entry.getCount(); 
    } 
} 
return mostCommon; // this is the most common element 
+0

如果您不能使用第三方庫 - 可能是這種情況,如果這是家庭作業 - 您應該使用AVD的解決方案。 –

3

您需要在此處指定Key

for(int i = 0; i < list.size(); i++) { 
     int value=list.get(i); 
     if(!Mode.containsKey(value)) 
      Mode.put(value,1); 
     else 
      Mode.put(value,Mode.get(value)+1); 
} 
+0

@AVD是對的。或者你的問題不清楚。根據我的理解,您正在計算數組中出現值的次數。因此,您使用該值作爲您的地圖的關鍵字,然後將出現次數作爲地圖值。這正是建議的內容。如果這不正確,請澄清您的問題並解釋爲何所提供的解決方案無效。 –

+0

已編輯的解決方案的第一篇文章沒有工作 – Kristopher

2

根據您的意見,

for(int i = 0; i < list.size(); i ++) { 
    if(Mode.containsKey(list.get(i))){ 
     Integer count = Mode.get(list.get(i)); 

     Mode.put(list.get(i), ++count);} 
    else 
     Mode.put(list.get(i), 1); 
相關問題