2012-04-18 123 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(); 
}