[英]Why does this code in java print a reference instead the result of invoking the method?
我应该写一个接受3个2-D数组的方法。该方法应该确定矩阵之一是否是另外两个矩阵相加的结果。
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;
}
}
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
方法也是错误的-它试图比较数组本身而不是is元素:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.