我的堆栈有问题。我试图实现回溯来解决挂钉单人拼图。我无法将对象正确地对象推向堆栈。使用pop()
时,它始终返回相同的对象。我尝试创建一个简单的java应用程序,这是我的代码:
Try s = new Try();
Integer x;
s.x=0;
mark.push(s);
s.x=1;
mark.push(s);
s.x=2;
mark.push(s);
while(!mark.isEmpty()){
s= (Try) mark.pop();
x = s.x;
System.out.println(x.toString());
}
Try
仅包含公开Integer
变量。
表明:
2
2
2
请帮帮我。非常感谢你。
答案 0 :(得分:0)
之所以发生这种情况,是因为您只有一个Try类的实例放置在堆栈中3次。所以显示了最后一个值(2)。
为每个push()
创建一个不同的Try实例答案 1 :(得分:0)
正如已经指出的那样,你正在推动一个Try
实例三次,但这里有一个更简单的场景来证明这一点:
public static void main(String[] args) {
List<Test> list = new ArrayList<>();
Test test = new Test();
test.x = 1;
list.add(test);
test.x = 2;
list.add(test);
test.x = 3;
list.add(test);
System.out.println(list.stream().map(c -> new Pair<>(c.x, c == test)).collect(Collectors.toList()));
}
private static class Test {
int x;
}
这输出[3=true, 3=true, 3=true]
- 它们都是相同的对象,因此具有相同的值。
推送(或在我的示例中添加)对象只是传递对该对象的引用。你也有一个对象的引用;修改任何一个都会改变。如果要解决此问题,请每次都创建Try
的新实例。