我正在实现一个带有两个堆栈的字符缓冲区。我正在使用 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>();
您创建了与实例变量同名的局部变量,因此您还没有初始化实例变量 stackLeft
和 stackRight
,因此 Java 将它们初始化为 空
。
删除类型,以便名称解析为实例变量。
stackLeft = new Stack<Character>();
stackRight = new Stack<Character>();
关于Java堆栈推送方法NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664883/