为什么java中的代码打印引用而不是调用方法的结果?

时间:2015-06-03 17:25:31

标签: java arrays methods reference boolean

我应该写一个接受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;
    }
}

1 个答案:

答案 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方法也是错误的。您的代码一起迭代ij,因此它只对矩阵对角线上的元素求和,而不是添加所有元素。您应该使用嵌套循环:

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;
}