Java在2d数组中计算重复数字

时间:2012-04-18 00:42:00

标签: java multidimensional-array

我试图创建一个java方法,该方法将查看2d数组,并查看多次输入多少次数,然后输出计数。

所以给定这个数组

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,每次运行检查时重新声明它们。

4 个答案:

答案 0 :(得分:3)

如何实施:

  1. 创建一个地图以存储看到的数字。
  2. 循环遍历2d数组中的每一行。
  3. 循环遍历2d数组中的每一列
  4. 如果之前未显示过数字(不在地图中),请插入值为1的地图
  5. 如果之前已经看过数字(在地图中),则在地图条目中增加值
  6. 循环显示地图中的值,并计算数字&gt; 1;这个值是你的答案

答案 1 :(得分:1)

策略:迭代整个数组,并将每个元素与所有其他元素进行比较。将结果收集到变量中。既然我认为这是作业,我不能给你代码,但策略应该足以让你开始。

答案 2 :(得分:0)

你可以通过查看每一行来循环遍历数组......

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

然后通过将数字与所有其他数字进行比较来检查数字是否已被重复,您可以将其存储在其他地方。

答案 3 :(得分: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();
}