【问题标题】:How to create a duplicate of a stack in Java [duplicate]如何在Java中创建堆栈的副本[重复]
【发布时间】: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


    【解决方案1】:

    你得到一个NullPointerException,因为backStacknull(你永远不会初始化它)。改变

    private Stack backStack;
    

    类似

    private Stack backStack = new Stack();
    

    【讨论】:

    • 哇!我现在觉得有点跛了哈哈!谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2015-06-16
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    相关资源
    最近更新 更多