2012-04-18 65 views
0

我試圖創建一個java方法,它將查看一個二維數組,並查看一個數字多次進入多次,然後輸出計數。Java計數重複數字在一個二維數組

所以給這個數組

1 2 3 3 
5 6 7 8 
8 45 9 45 
10 17 18 13 

該方法將返回的3計數。

到目前爲止,這是我所

int dupe=0; 
    int chk1=0, chk2=0; 

    for (int row =0; row < dataTable.length; row ++) 
    {//for 1 

     for (int col = 0; col < dataTable[row].length; col++) 
     {//for 2 





      if (dataTable[row][col] == dataTable [chk1][chk2]) 
      {//if 

      dupe++; 
      }//end if 

     chk1++; 
     chk2++; 



    }//end for 2 

}//end for 1 
    dupe=dupe-1; 
return dupe; 

但是它不會運行,除非我宣佈第二個4剛剛重新宣佈他們每次檢查運行時間內CHK1和CHK2。

+0

那你試試這麼遠嗎? – 2012-04-18 00:43:18

+5

你的代碼在哪裏?這是功課嗎? – Jeffrey 2012-04-18 00:43:36

+0

您是否正在計算重複項或全部重複項的全球總數?看來你正在獲得全球重複。 – Makoto 2012-04-18 00:45:08

回答

3

它如何實現:

  1. 創建映射到存儲看到的數字。
  2. 循環遍歷2d數組中的每一行。
  3. 循環通過在二維陣列中的每個列
  4. 如果號尚未之前(未在地圖),插入到地圖與值1
  5. 如果數量之前在地圖(地圖),增量值被看作看出條目
  6. 循環映射中的值,並計數> 1;這個值是你的答案
1

策略:遍歷整個數組,並將每個元素與所有其他元素進行比較。將結果收集在一個變量中。因爲我認爲這是作業,所以我不能給你代碼,但是這個策略應該足以讓你開始。

0

那麼你可以通過循環通過每一行尋找數組...

for(int i = 0; i < rows; i++) { 
    for(int j = 0; j < columns; j++) { 
     // check 
    } 
} 

,然後檢查了一些已經通過比較所有其它的數字,可以存儲在其他地方重複。

+0

其他地方可能是你已經找到的數字的'HashSet'或'TreeSet'。 – 2012-04-18 20:47:09

+1

看起來好像OP已經理解如何迭代2d數組。這個'解決方案'沒有回答OP的問題。 – 2014-08-16 15:24:32

0

兩種解釋:

/** 
* The number of entries that are double of others. 
* When 4 threes occure, 3 threes are counted. 
*/ 
public static int moreThanOnce(int[][] matrix) { 
    Set<Integer> uniqueNumbers = new HashSet<Integer>(); 
    int n = 0; 
    for (int row = 0; row < matrix.length; ++i) { 
     n += matrix[i].length; 
     Collections.addAll(uniqueNumbers, matrix[i]); 
    } 
    return n - uniqueNumbers.size(); 
} 

/** 
* The number of different numbers appearing more than once. 
* When four appears 3 times and eight 4 times, then the result is 2. 
*/ 
public static int moreThanOnce2(int[][] matrix) { 
    Set<Integer> usedNumbers = new HashSet<Integer>(); 
    Set<Integer> doubleNumbers = new HashSet<Integer>(); 
    for (int[] row : matrix) { 
     for (int x : row) { 
      if (!usedNumbers.add(x)) { // Not added, already used 
       doubleNumbers.add(x); 
      } 
     } 
    } 
    return doubleNumbers.size(); 
}