【问题标题】:How to traverse through 2d array and count how many elements are greater than 1 in each row in row major order如何遍历二维数组并按行主要顺序计算每行中有多少个元素大于1
【发布时间】:2019-10-15 03:15:47
【问题描述】:

我正在编写一个以行优先顺序遍历二维数组的方法,并且在每一行的开头,我将一个计数变量初始化为零。在内部循环中,如果一个值不为零,我会增加 count 变量。在行尾,如果 count 变量不完全等于 1,则返回 false。我已经为此工作了大约 2 周,但找不到我的错误。请指出我正确的方向。 ** 不要介意打印语句,我试图查看计数是多少,而我的代码似乎只命中了数组的第二行

public static boolean isGPM(int[][] matrix) {
    int count =0;
    for (int row = 0; row < matrix.length; row++) {
        count =0;
        for (int col = 0; col < matrix[row].length; col++) {
            if (matrix[row][col] > 0) {
                count++;
            }
            else {
                return !gpm;
            }
        }
    }
    System.out.println(count);
    return gpm;
}

【问题讨论】:

  • 你的内循环 else 部分有问题。检查计数是否不等于一。
  • 你的意思是没有零或大于零?

标签: java arrays matrix 2d


【解决方案1】:

如果我理解正确,您只关心每行计数。这应该有效:

        int count = 0;

        // Process each row...
        for (int row = 0; row < matrix.length; row++) {

            count = 0;

            // Process each column...
            for (int col = 0; col < matrix[row].length; col++) {

                 // Check the cell.
                 if (matrix[row][col] != 0) {
                     count++;
                 }                     
            }
            // Row processing complete. Check count.
            if (count != 1) {
                System.out.println(count);
                return gpm;
            }
        }

【讨论】:

  • 我还必须计算列数,但我认为我会先遍历行,然后对列执行相同操作,但按列行顺序遍历。
  • 矩阵是否保证为二维方阵?如果是这样,上面答案中的代码可以用于行优先计数,并且可以修改代码的副本,交换两个 for 行以使其成为列优先。如果矩阵不是二维正方形数组,即行的长度不同,则需要在代码的列优先版本中考虑这一点。
  • 祝福大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 2018-09-02
  • 2022-11-24
  • 2019-11-24
  • 1970-01-01
  • 2013-09-26
相关资源
最近更新 更多