我几乎完成了一个可对两个矩阵进行加,减和缩放的程序。我为每个测试用例创建了两个测试用例,并为当两个矩阵的大小不同的标准协议添加了错误消息。但是,我的第二个减法案例遇到了问题。这是两个二维数组:

int[][] a = {{1,2},{3,4}};
int[][] b = {{2,3},{5,7}};


这是减法,分别是call和println:

public static int[][] subtraction(int[][] arr1, int[][] arr2){
        int rows1 = arr1.length;
        int rows2 = arr2.length;
        int columns1 = arr1[0].length;
        int columns2 = arr2[0].length;
        if (rows1 != rows2 || columns1 != columns2){
            System.out.print("Matrices are not the same size, please try again.");
            return null;
        }
        for (int i = 0; i < rows1; i++){
            for (int j = 0; j < columns1; j++){
                arr1[i][j] -= arr2[i][j];
            }
        }
        return arr1;
    }




System.out.println(Arrays.deepToString(subtraction(b, a)));




[[1, 1], [2, 3]]


退房吧?那为什么呢...

System.out.println(Arrays.deepToString(subtraction(a, b)));


...打印这个?

[[1, 2], [3, 4]]


我已经深入研究了数组文档和堆栈溢出,但从未见过这样的事情。该程序仅打印第一个数组,而不完成计算。我在这里想念什么吗?

谢谢您理解我的困境。

最佳答案

我得到[[-1,-1],[-2,-3]],这是正确的,减法会更改第一个参数,因此运行

System.out.println(Arrays.deepToString(subtraction(b, a)));
System.out.println(Arrays.deepToString(subtraction(a, b)));


[[1,1],[2,3]]
[[0,1],[1,1]]

因此,也许您在调用减法(a,b)之前已更改a或?

10-08 08:00