Java堆栈推送方法NullPointerException

标签 java nullpointerexception stack character

我正在实现一个带有两个堆栈的字符缓冲区。我正在使用 insert() 方法插入一个元素:

class Buffer
{
    private Stack<Character> stackLeft;
    private Stack<Character> stackRight;
    private int size;

    Buffer()
    {
        Stack<Character> stackLeft   = new Stack<Character>();
        Stack<Character> stackRight  = new Stack<Character>();
        size = 0;
    }

    public void insert(char c)
    {
        size ++;
        stackLeft.push(c); //This line returns NullPointerException
    }
}

每次尝试压入 c 字符变量时,都会抛出空指针异常。 这是我从 main 中调用它的方式:

public static void main(String[] args)
{
    Buffer tb = new Buffer();

    Character ch = new Character('a');
    tb.insert(ch);
    tb.insert(new Character('a'));
    tb.insert('a');
}

所有这些都返回空异常。断言Character 可以正常到达方法内部。我使用了java.util.Stack;当它失败时,我实现了自己的。但还是失败了。
我可能做错了什么?
感谢任何形式的帮助!

最佳答案

在构造函数中使用以下几行:

Stack<Character> stackLeft   = new Stack<Character>();
Stack<Character> stackRight  = new Stack<Character>();

您创建了与实例变量同名的局部变量,因此您还没有初始化实例变量 stackLeftstackRight,因此 Java 将它们初始化为

删除类型,以便名称解析为实例变量。

stackLeft   = new Stack<Character>();
stackRight  = new Stack<Character>();

关于Java堆栈推送方法NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664883/

相关文章:

c - 如果我使用这种方法弹出元素,我怎么知道堆栈是空的?

java - 高负载下 Netty 服务器中的请求花费更长的时间

java - 如何使用 ESAPI 修复资源注入(inject) (URL) 问题

java - 为什么 NullPointerException 未声明为已检查异常

android - NullpointerException 在 LinkedHashMap 上使用 put 方法

debugging - 如何衡量堆栈消耗的内存量?

java - 我们可以在作业的 LHS 上构建和使用字符串吗?

java - 单页应用。模板管理的安全性

java - 什么是NullPointerException,我该如何解决?

c - 为什么在此 C 代码中会发生堆栈粉碎?