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 2015-02-08 02:05:36
@immibis不要太多 – user1745999 2015-02-08 02:08:45
你能告訴我們你的'checkSolution'方法嗎?我相信問題是,雖然你檢查瞭解決方案,但你仍然稱爲'valid [i] = 1 - valid [i]',這可能是你的'for'循環的最後一行(在你關閉循環之前)問題。你可能需要在那裏放一個'if'語句來檢查它是否在堆棧中。 – CoderMusgrove 2015-02-08 02:50:37