我正在尝试用 Java 开发一种算法,给定两个矩阵(比如 a
和 b
),返回 true
如果 a
和 b
中至少有一行相同。
这是我尝试的方法:
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/