【发布时间】:2020-01-17 19:44:00
【问题描述】:
我想检查变量(“矩阵”)在发送到特定函数(“moveAround”)时是否发生了变化, 所以我创建了另一个变量(“matrixB”),我给了它来自给定第一个变量的函数的值, 现在我比较这两个变量。
问题在于,由于某种原因,第一个变量和第二个变量都发生了变化。
代码如下所示:
matrixB = moveAround(matrix, userDir);
cmpMatrices(matrix, matrixB);
函数“moveAround”旨在返回一个不同的矩阵,然后给出(大部分时间)。 如果两个矩阵相似,则函数“cmpMatrices”返回 true,如果至少有一个分量不相等,则返回 false。
由于某种原因,当我在给它“matrix”后从“moveAround”函数中得到“matrixB”时,它同时改变了“matrix”和“matrixB”。
函数“moveAround”相对于“userDir”调用另一个函数名“moveUp”/“moveDown”/“moveRight”/“moveLeft”。
函数“moveUp”如下所示:
public static int[][] moveUp(int[][] matrix) {
int i, j, m;
for (j = 0; j < matrix.length; j++) {
m = 1;
for (i = 0; i + m < matrix.length;) {
if (matrix[i + m][j] == 0) {
m++;
} else {
if (matrix[i + m][j] == matrix[i][j]) {
matrix[i][j] = 2 * matrix[i][j];
matrix[i + m][j] = 0;
i++;
} else {
if (matrix[i][j] == 0) {
matrix[i][j] = matrix[i + m][j];
matrix[i + m][j] = 0;
m++;
} else {
if (m != 1) {
matrix[i + 1][j] = matrix[i + m][j];
matrix[i + m][j] = 0;
i++;
} else {
i++;
}
}
}
}
}
}
return matrix;
}
其他的向下/向右/向左移动非常相似,只是方向不同。
函数“cmpMatrices”如下所示:
public static boolean cmpMatrices(int[][] matrixA, int[][] matrixB){
for(int i = 0; i < matrixA.length; i++){
for(int j = 0; j < matrixA[i].length; j++){
if(matrixA[i][j] != matrixB[i][j]){
return false;
}
}
}
return true;
}
【问题讨论】:
-
你能添加 moveAround 方法的定义吗?它可以帮助你理解你的问题。
-
如果您按照
matrixB = matrix的方式进行操作,它们将指向同一个对象,因此如果您更改一个对象,那么您也会更改另一个对象。 -
请显示完整代码
-
只需创建一个布尔变量,例如
changed,并在每次更新矩阵时将其设置为true... -
或者使用 javafx 属性...
标签: java