为什么这个数组值在我 "store" 之后改变了?
Why is this array value changing after I "store" it?
public static Stack<int[]> myMethod(int[] state) {
int[][] checked = new int[4][4];
int[][] temporary = new int[4][4];
Stack<int[]> checklol = new Stack();
int farmer = state[0];
int[] valid = { 0, 0, 0, 0 };
int[] temp = { 0, 0, 0, 0 };
// invert farmer
farmer = 1 - farmer;
valid[0] = farmer;
valid[1] = state[1];
valid[2] = state[2];
valid[3] = state[3];
for (int i = 1; i < 4; i++) {
valid[i] = 1 - valid[i];
if (checkSolution(valid)) {
checklol.push(valid);
}
valid[i] = 1 - valid[i];
}
return checklol;
}
所以基本上我从一个数组开始 [1,1,1,1]
我所做的是将第一个翻转为零。这就是我在农民那里所做的 - 1
然后在那个循环中,我遍历第二个数字并翻转那个数字。然后我调用那个 checked 方法,如果它是有效的,那么我想把它压入堆栈。然后我将第二个数字改回原来的数字。
然后我对第三个数字做同样的事情。然后是第四个。
我的问题是压入堆栈的数组被随后的迭代更改了。所以我在堆栈上有 [1,0,1,1],但在它被推入后将其更改为 [1,1,1,1]。但我不希望这种情况发生。
归结为:一旦它在堆栈上,我就不想再更改该值。但还是变了。
如果有任何不清楚的地方,我提前道歉。
我通过先克隆数组然后将其压入堆栈来修复此问题。
public static Stack<int[]> myMethod(int[] state) {
int[][] checked = new int[4][4];
int[][] temporary = new int[4][4];
Stack<int[]> checklol = new Stack();
int farmer = state[0];
int[] valid = { 0, 0, 0, 0 };
int[] temp = { 0, 0, 0, 0 };
// invert farmer
farmer = 1 - farmer;
valid[0] = farmer;
valid[1] = state[1];
valid[2] = state[2];
valid[3] = state[3];
for (int i = 1; i < 4; i++) {
valid[i] = 1 - valid[i];
if (checkSolution(valid)) {
checklol.push(valid);
}
valid[i] = 1 - valid[i];
}
return checklol;
}
所以基本上我从一个数组开始 [1,1,1,1] 我所做的是将第一个翻转为零。这就是我在农民那里所做的 - 1 然后在那个循环中,我遍历第二个数字并翻转那个数字。然后我调用那个 checked 方法,如果它是有效的,那么我想把它压入堆栈。然后我将第二个数字改回原来的数字。 然后我对第三个数字做同样的事情。然后是第四个。
我的问题是压入堆栈的数组被随后的迭代更改了。所以我在堆栈上有 [1,0,1,1],但在它被推入后将其更改为 [1,1,1,1]。但我不希望这种情况发生。
归结为:一旦它在堆栈上,我就不想再更改该值。但还是变了。
如果有任何不清楚的地方,我提前道歉。
我通过先克隆数组然后将其压入堆栈来修复此问题。