Ser*_*gio 3 java algorithm matrix
我试图用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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的主要内容:
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));
}
Run Code Online (Sandbox Code Playgroud)
在这里,我得到true因为两个矩阵的第一行是相同的.但是,如果我将矩阵初始化更改为:
int a[][] = {{1,2}, {3,4}};
int b[][] = {{5,6}, {1,2}};
Run Code Online (Sandbox Code Playgroud)
我知道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;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,您不需要为数组比较编写自己的函数,但使用Arrays.equal(int[], int[]),但它只会隐藏第3个循环.上面的方法在数组长度不同的情况下抛出运行时异常.确定Arrays.equal(int[], int[])一些技巧(检查相等+空检查)的实现是明确的.