繁体   English   中英

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

[英]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方法也是错误的。 您的代码将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方法也是错误的-它试图比较数组本身而不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM