2015-10-14 64 views
0

我正在計數一個數組的整數並將這些整數的計數存儲在另一個數組中。計數數組中的整數並將計數存儲在另一箇中

該代碼計算整數的出現次數,但繼續計算其餘不同整數的餘數並停止計數。代碼只存儲第一個整數發生的計數,沒有問題。

我的問題是,計數不會重置當循環擊中下一個整數,並繼續從最後一個整數計數,並顯示它。

如何提高我的代碼以查找每個整數的整數出現?

public count() { 
    int k[] = {1,1,2,2}; 
    int t[] = {0,0,0,0,0}; 
    int count = 0; 
    System.out.println("reset count: "+count); 

    for (int f = 0; f<k.length; f++) { 
     for (int i =1; i < k.length-1; i++) { 
      for (int g = 0; g < t.length; g++) { 
       if (k[f] == i) { 
        count++; 
        System.out.println("Integer = "+i); 
        System.out.println("count: "+count); 
        t[g] = count; 
       } 
       i++; 
      } 
     } 
    } 
    System.out.println(); 
    for (int o = 0; o < t.length; o++) { 
     System.out.println("Stored int counts t" + o + " = " + t[o]); 
    } 
} 

回答

5

如果您知道是什麼k最大可能的元素(可以假設100),那麼你可以線性解決它:

int[] t = new int[101]; //subject of change 
for (int i : k) { 
    t[i]++; 
} 

在這裏,你會增加的價值ik的當前處理元素k的值爲i

否則,如果你不知道的k最大可能的要素(分別,你不會知道如何初始化數組t),你可以使用一個Map

Map<Integer, Integer> map = new TreeMap<>(); 
for (int i : k) { 
    if (map.containsKey(i)) { 
     int value = map.get(i); 
     map.put(i, ++value); 
    } else { 
     map.put(i, 1); 
    } 
} 

for (Map.Entry<Integer, Integer> entry : map.entrySet()) { 
    int i = entry.getKey(); 
    int n = entry.getValue(); 
    System.out.println("The number " + i + " was found " + n + " times."); 
} 
+0

使用映射而不是數組提升知道最大元素的限制,並且可以在處理完成後構建數組。 –

+0

@ Dragos.Cojocari,只是用替代方法('Map')更新了答案。 –

+0

啊我看到沒有想到使用每個循環。我也會嘗試使用'Map',非常感謝! – girthquake

0

你可以使用HashMap將唯一值保存爲鍵,並在迭代中檢查該鍵是否已經存在,如果確實存在,則增加其值,否則繼續。

希望這會有所幫助。

相關問題