【发布时间】:2015-04-08 00:18:01
【问题描述】:
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 然后在那个循环中,我遍历第二个数字并翻转那个。然后我调用这个检查的方法,如果它是有效的,那么我想把它压入堆栈。然后我将第二个数字改回原来的数字。 然后我对第三个数字做同样的事情。然后是第四个。
我的问题是推入堆栈的数组被它们后面的迭代所改变。所以我在堆栈上有 [1,0,1,1] ,但是在它被推送后它变成了 [1,1,1,1] 。但我不希望这种情况发生。
归结为:一旦它在堆栈上,我不想再更改值。但它已经改变了。
如果不清楚,我提前道歉。
【问题讨论】:
-
你对对象和引用了解多少?
-
@immibis 不多
-
你能告诉我们你的
checkSolution方法吗?我认为问题在于,查看for循环的最后一行(在关闭循环之前),尽管您检查了解决方案,但您仍然调用了valid[i] = 1 - valid[i],这可能是问题所在。您可能需要在那里放置一个if语句来检查它是否在堆栈中。 -
请考虑通过单击复选标记接受您自己的答案
-
@tarik 我要等两天