Java 在二维数组中计算重复的数字



我试图创建一个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,否则它不会运行,后者每次运行检查时都会重新声明它们。

如何实现:

  1. 创建地图以存储看到的数字。
  2. 循环遍历 2D 数组中的每一行。
  3. 循环遍历 2D 数组中的每一列
  4. 如果以前没有看到数字(不在地图中),则插入到值为 1 的地图中
  5. 如果之前(在地图中)看到过数字,则在地图输入时递增值
  6. 循环遍历 map 中的值,并计算 1>数字;此值就是您的答案

策略:遍历整个数组,并将每个元素与所有其他元素进行比较。 将结果收集到变量中。 由于我认为这是家庭作业,所以我不能给你代码,但策略应该足以让你入门。

好吧,您可以通过查看每一行来遍历数组......

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

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

两种解释:

/**
 * 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();
}

最新更新