我应该写一个接受3个二维数组的方法。这个方法应该确定其中一个矩阵是否是另外两个矩阵加法的结果。
public class Matrix {
public static void main(String[]args){
int [][] a = {{5,2,3},{4,1,6},{0,7,2}};
int [][] b = {{1,2,3},{4,5,6},{0,1,2}};
int [][] t = {{6,4,6},{8,6,12},{0,8,4}};
System.out.println(add(a,b));
System.out.println(check(a,b,t));
}
public static int [][] add(int[][]a,int[][]b){
int i=0;
int j=0;
int[][] r = new int [3][3];
while (i<a.length){
r[i][j] = a[i][j] + b[i][j];
i++;
j++;
}
return r;
}
public static boolean check(int[][]a,int[][]b,int[][]t){
int i = 0;
int j = 0;
while(i<t.length){
if(t==add(a,b))
return true;
}
return false;
}
}
答案 0 :(得分:1)
add
返回一个数组。 Java中的数组是对象,但它们不会覆盖toString()
方法。打印时,您需要打印默认的toString()
来电,该调用由Object
return getClass().getName() + "@" + Integer.toHexString(hashCode());
实施。
幸运的是,Java以java.util.Arrays.deepToString(Ojbect[])
的形式提供了一个实用程序来生成更可读的字符串输出:
System.out.println(Arrays.deepToString(add(a,b)));
编辑:
您的add
方法也是错误的。您的代码一起迭代i
和j
,因此它只对矩阵对角线上的元素求和,而不是添加所有元素。您应该使用嵌套循环:
public static int [][] add(int[][]a, int[][]b) {
int[][] r = new int [3][3];
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
r[i][j] = a[i][j] + b[i][j];
}
}
return r;
}
顺便提一下,你的check
方法也是错误的 - 它试图比较数组本身而不是元素:
public static boolean check(int[][]a, int[][]b, int[][]t) {
int[][] r = add(a, b);
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (r[i][j] != t[i][j]) {
return false;
}
}
}
return true;
}