有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

比较二维数组中行或列的元素(Java)

我有一个String[][] field。例如,它可能看起来像:

[xy] [xy] [xy] [xy] [xy]
[xy] [xy] [xy] [xy] [xy]
[xy] [xy] [xy] [xy] [xy]
[xy] [xy] [xy] [xy] [xy]
[xy] [xy] [xy] [xy] [xy]

行数和列数相等,但每次的行数可能不同。我需要检查整行或整列元素的值是否相等。 我为3x3field编写了一些错误代码来检查行,如下所示:

public boolean checkHorizontal(String[][] field) {
        boolean value = false;
        int x = 0;
        for (int i = 0; i < field.length; i++) {
            if (field[i][x].equals(field[i][x + 1]) &&
                    field[i][x + 1].equals(field[i][x + 2]) &&
                    !field[i][x].equals("[something]")) {
                value = true;
            }
        }
        return value;
    }

但这并不是检查行的通用方法,因为我们可能有不同大小的矩阵(并且需要添加x + 3x + 4x + 5,等等) 是否有任何有效的方法来比较2D数组的整行/整列


共 (2) 个答案

  1. # 1 楼答案

    @quidproquo的答案实际上是检查所有字段是否相等,但很容易将解决方案调整为一行或一列:

    public boolean isEqual(String[][] data, int rowColumn, boolean row){
        int i = 1;
        int limit = (row) ? data[0].length : data.length;
        while(i<limit){
             if ((row) ? !data[rowColumn][i].equals(data[rowColumn][0])
                 : !data[i][rowColumn].equals(data[0][rowColumn]))
                 return false;
        }
        return true;
    }
    
  2. # 2 楼答案

    要检查所有行,请执行以下操作:

    for(int i = 0; i < field.length; i++){
        for(int j = 1; j < field[i].length; j++){
            if(!field[i][0].equals(field[i][j])){
                return false;
            }
        }
    }
    
    return true;