【发布时间】:2016-01-15 01:42:02
【问题描述】:
我几乎完成了一个添加、减去和缩放两个矩阵的程序。我为每个测试用例创建了两个测试用例,并在两个矩阵大小不同时添加了错误消息,标准协议。但是,我在第二个减法案例中遇到了问题。这是两个二维数组:
int[][] a = {{1,2},{3,4}};
int[][] b = {{2,3},{5,7}};
这里分别是减法、调用、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]]
我已经对数组文档和堆栈溢出进行了大量研究,但我从未见过这样的事情。该程序只是打印第一个数组而不是完成计算。我在这里遗漏了什么吗?
感谢您理解我的困境。
【问题讨论】:
-
当我运行
subtraction(a, b)时,我得到[[-1, -1], [-2, -3]]。你还跑了什么?请记住,您实际上是在修改arr1。您也将其退回只会使打印更容易。 -
Java 是按值传递的。指向第一个矩阵的引用是不可变的,但它的状态不是。最好创建一个新实例,将差异加载到其中,然后返回新实例。