2015-02-08 49 views
0
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]。但我不希望發生這種情況。

歸結爲:一旦它在堆棧上,我不想再改變它的值。但它卻被改變了。

如果這事不清楚,請提前道歉。

+3

你對對象和參考有什麼瞭解? – immibis 2015-02-08 02:05:36

+0

@immibis不要太多 – user1745999 2015-02-08 02:08:45

+0

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

回答

0

我解決這個問題的方法是首先克隆數組,然後將其推入堆棧。

+0

你應該接受你自己的答案把它從「未答覆」的隊列中取出 – 2015-02-08 02:40:53

相關問題