我的老师要求我创建一个Stack的副本,它返回一个新的Stack,它包含与指定Stack相同的元素和顺序。
如果我只能使用Stack独有的方法,我会将每个元素从Stack中弹出并放到一个que上。然后我会从que的底部弹出一个新的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唯一方法)之外,有没有办法制作副本?
答案 0 :(得分:2)
您得到NullPointerException
,因为backStack
是null
(您永远不会初始化它)。变化
private Stack backStack;
类似
private Stack backStack = new Stack();