Java 为什么这个数组值在我“存储”它之后会发生变化?
基本上我从一个数组开始,它是[1,1,1,1] 我要做的就是把第一个倒转成零。这就是我在farmer-1中所做的 然后在这个循环中,我通过第二个数字并翻转那个数字。然后我调用checked方法,如果它是有效的,那么我想把它推到堆栈中。然后我把第二个号码改回原来的号码。 然后我对第三个数字做同样的事情。然后是第四个 我的问题是,推送到堆栈中的数组会因随后的迭代而改变。因此,我在堆栈上有[1,0,1,1],但在它被推后,它将其更改为[1,1,1,1]。但我不想发生这种事 归结起来就是:一旦它在堆栈上,我就不想再改变它的值了。但它却改变了Java 为什么这个数组值在我“存储”它之后会发生变化?,java,arrays,for-loop,Java,Arrays,For Loop,基本上我从一个数组开始,它是[1,1,1,1] 我要做的就是把第一个倒转成零。这就是我在farmer-1中所做的 然后在这个循环中,我通过第二个数字并翻转那个数字。然后我调用checked方法,如果它是有效的,那么我想把它推到堆栈中。然后我把第二个号码改回原来的号码。 然后我对第三个数字做同样的事情。然后是第四个 我的问题是,推送到堆栈中的数组会因随后的迭代而改变。因此,我在堆栈上有[1,0,1,1],但在它被推后,它将其更改为[1,1,1,1]。但我不想发生这种事 归结起来就是:一旦它在堆栈上
如果不清楚,我提前道歉 我首先克隆了数组,然后将其推到堆栈中,从而解决了这个问题。关于对象和引用,您知道些什么?@immibis不太了解您的checkSolution方法吗?我认为问题是,在关闭循环之前,请查看for循环的最后一行,尽管您检查了解决方案,但仍然调用valid[I]=1-valid[I],这可能是问题所在。您可能需要在其中设置一个if语句来检查它是否在栈中。请考虑通过单击“检查”来接受您自己的答案。mark@tarik我得等两天你应该接受你自己的答案才能把它从无人应答的队列中弄出来
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;
}