java - 如何检查两个矩阵是否有相同的行?

标签 java algorithm matrix

我正在尝试用 Java 开发一种算法,给定两个矩阵(比如 ab),返回 true如果 ab 中至少有一行相同。

这是我尝试的方法:

public static boolean check_row(int a[][], int b[][]){
        boolean check = false;
        for(int i = 0; i < a.length; i++){
            for(int j = 0; j < b[0].length; j++){
                if(a[i][j] == b[i][j])
                    check = true;
            }
        }
        return check;
    }

这是一个简单的主要部分:

public static void main(String[] args){
        int a[][] = {{1,2}, {3,4}};
        int b[][] = {{1,2}, {7,8}};
        System.out.println(check_row(a, b));
    }

这里我得到 true 因为两个矩阵的第一行是相同的。 但是,如果我将矩阵初始化更改为:

int a[][] = {{1,2}, {3,4}};
int b[][] = {{5,6}, {1,2}};

我得到了 false,即使 a 的第一行和 b 的第二行是相同的。

我应该如何修改方法才能在这两种情况下都得到 true

最佳答案

你的条件太简单了……高层次的想法是,对于 a 和 b 的每一行,选择一行,然后判断它是否相同,所以你需要 3 个循环……

代码:

public class SameRowFinder {

    public static void main(String[] args){
        int a[][] = {{1,2},{3,4}};
        int b[][] = {{1,2}, {7,8}};
        System.out.println(hasSameRow(a, b));

        int aa[][] = {{1,2},{3,4}};
        int bb[][] = {{5,6}, {1,2}};
        System.out.println(hasSameRow(aa, bb));
    }

    private static boolean hasSameRow(int[][] a, int[][] b) {
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                if (isSameRow(a[i], b[j])) {
                    System.out.printf("Same rows are %d and %d (0-based).%n", i, j);
                    return true;
                }
            }
        }
        return false;
    }

    private static boolean isSameRow(int[] row1, int[] row2) {
        if (row1.length != row2.length) {
            throw new IllegalArgumentException("rows with different length");
        }
        for (int i = 0; i < row2.length; i++) {
            if (row1[i] != row2[i]) {
                return false;
            }
        }
        return true;
    }
}

此外,您不需要为数组比较编写自己的函数,而是使用 Arrays.equal(int[], int[]),但它只会隐藏第三个循环。如果数组长度不同,上述方法会抛出运行时异常。绝对值得查看 Arrays.equal(int[], int[]) 实现以获得一些提示(检查相等性 + null 检查)。

关于java - 如何检查两个矩阵是否有相同的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48563505/

相关文章:

java - 如何获取驻留在 src/main/resources 中的 .exe 文件的路径

Javascript 获取英文计数

python - 如何在Python中求矩阵指数的积分

java - Android 文件创建失败

java - 在 JPA/Hibernate 中执行只读操作的最佳实践是什么?

java - Maven 捆绑插件 : Export has private references

c - 我的加泰罗尼亚数字逻辑有什么问题?

algorithm - bool 值的多维聚类

c - OpenMP 错误共享和缓存命中利用

c - 具有函数 c 的动态矩阵