2017-03-08 84 views
0

所以我試圖編寫一個程序來統計數組中int的出現次數。我試圖做的是做一個方法列出唯一的整數,然後另一種方法來比較列表項目與原始數組項目。使用列表計算int數組的出現次數

public List listUnique(int[] arr){ 
    Arrays.sort(arr); 
    List <Integer> temp = new ArrayList<>(); 
    int currentInt = 0; 
    for (int i = 0; i < arr.length; i++){ 
     if(arr[i] != currentInt){ 
      temp.add(arr[i]); 
      currentInt = arr[i]; 
     } 
    } 
    return temp; 
} 
public int[] countDupli(List unique, int[] arr){ 
    int [] ret = new int[unique.size()]; 
    Iterator <Integer> iterator = unique.iterator(); 
    for (int l = 0; l < unique.size(); l++){ 
     ret[l] = iterator.next().intValue(); 
    } 
    int[] dupli = new int[ret.length]; 
    for (int j = 0; j < ret.length; j++){ 
     dupli[j] = 0; 
    } 
    for (int k = 0; k < ret.length; k++){ 
     for (int i = 0; i < arr.length; i++){ 
      if (ret[k] == arr[i]){ 
       dupli[k]+= 1; 
      } 
     } 
     k++; 
    } 
return dupli; 
} 

它沒有做什麼打算做什麼。例如,{1,2,...,1,2}中的10個項目的輸入打印正確的唯一項目,但僅輸出1的計數,但不輸出2. dupli = [5,0]。算法出錯了?謝謝

+0

你試過調試嗎? – shmosel

+0

還沒有,對不起,我在java中是一個新手。 –

+0

聽起來像是一張地圖工作 – Andreas

回答

0

在您的代碼中嘗試調試或只是打印ret []值,看看是否存在所有唯一值。

其他建議

List <Integer> temp = new ArrayList<>(); 
     int currentInt = 0; 
     for (int i = 0; i < arr.length; i++){ 
      if(arr[i] != currentInt){ 
       temp.add(arr[i]); 
       currentInt = arr[i]; 
      } 

您可以簡單地使用HashSet的,那麼你就不必寫上面的代碼中找到唯一的值。 HashSet不存儲重複值。

Set<Integer> set = new HashSet<Integer>(Arrays.asList(arr)); 

然後你可以使用迭代器,並與你的排序數組進行比較,並同時增加計數。

默認情況下,您可以跳過以下for循環,因爲java將其初始化爲0

int[] dupli = new int[ret.length]; 
    for (int j = 0; j < ret.length; j++){ 
     dupli[j] = 0; 
    }