【发布时间】:2016-04-08 20:29:59
【问题描述】:
我的老师要求我创建一个 Stack 的副本,它返回一个包含与指定 Stack 相同的元素和相同顺序的新 Stack。
如果我只能使用 Stack 独有的方法,我会将每个元素从 Stack 中弹出并放到一个队列中。然后我会从队列的底部弹出到一个新的堆栈上并返回新的堆栈。
但是,我认为由于 Stack 继承自 Vector,我可以只使用 Vector 中的 addAll() 方法!
这里是Java代码实现:
public class DuplicateStack {
private Stack backStack;
public Stack duplicateStack(Stack s) {
backStack.addAll(s);
return backStack;
}
这似乎为我完成了所有工作。唯一的问题是,当我在我的 main 中运行它时,我不断收到 nullPointerException:
Stack s1 = new Stack();
s1.push("c");
s1.push("b");
s1.push("a");
DuplicateStack dup = new DuplicateStack();
Stack s2 = dup.duplicateStack(s1);
while(!s2.empty())
System.out.println(s2.pop());
错误来自我的 DuplicateStack 类中的 addAll() 调用。 所以我的问题是为什么我会从 addAll() 中得到一个 nullPointerException,除了使用前面所述的方法(仅使用 Stack 唯一方法)之外,还有什么方法可以制作副本?
【问题讨论】:
标签: java nullpointerexception stack