【问题标题】:Why is this array value changing after I "store" it?为什么这个数组值在我“存储”它之后会发生变化?
【发布时间】: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 我要等两天

标签: java arrays for-loop


【解决方案1】:

我通过首先克隆数组然后将其推入堆栈来解决此问题。

【讨论】:

  • 您应该接受自己的答案,以便将其从“未回答”队列中删除
猜你喜欢
  • 2021-12-31
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多