将对象推入堆栈
pushing object to stack
我的堆栈有问题。我正在尝试实施回溯来解决 peg 纸牌难题。我无法正确地将对象推送到堆栈。当使用 pop()
时,它总是 return 同一个对象。我尝试创建一个简单的 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
只包含一个 public Integer
变量。
表明:
2个
2个
2
而不是
2个
1个
0
发生这种情况是因为您只有一个 Try class 实例被放入堆栈 3 次。因此显示了最后一个值 (2)。
为每个 push() 创建一个不同的 Try 实例
如前所述,您将 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
的新实例。
我的堆栈有问题。我正在尝试实施回溯来解决 peg 纸牌难题。我无法正确地将对象推送到堆栈。当使用 pop()
时,它总是 return 同一个对象。我尝试创建一个简单的 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
只包含一个 public Integer
变量。
表明:
2个
2个
2
而不是 2个 1个 0
发生这种情况是因为您只有一个 Try class 实例被放入堆栈 3 次。因此显示了最后一个值 (2)。
为每个 push() 创建一个不同的 Try 实例
如前所述,您将 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
的新实例。