Java堆栈推送方法NullPointerException
我正在实现一个具有两个堆栈的字符缓冲区。我正在使用insert()方法插入一个元素: 所有这些都返回一个空异常。断言字符到达方法内部是正确的。我使用java.util.Stack;当它失败时,我实现了自己的。但还是失败了。Java堆栈推送方法NullPointerException,java,nullpointerexception,stack,character,Java,Nullpointerexception,Stack,Character,我正在实现一个具有两个堆栈的字符缓冲区。我正在使用insert()方法插入一个元素: 所有这些都返回一个空异常。断言字符到达方法内部是正确的。我使用java.util.Stack;当它失败时,我实现了自己的。但还是失败了。 我可能做错了什么? 感谢您的任何帮助 使用构造函数中的以下行: Stack<Character> stackLeft = new Stack<Character>(); Stack<Character> stackRight = ne
我可能做错了什么?
感谢您的任何帮助 使用构造函数中的以下行:
Stack<Character> stackLeft = new Stack<Character>();
Stack<Character> stackRight = new Stack<Character>();
这是因为构造函数
Buffer()
不设置类变量,而是创建自己的局部变量(stackLeft、stackRight)并初始化该变量
更改此项::
class Buffer
{
private Stack<Character> stackLeft;
private Stack<Character> stackRight;
private int size;
Buffer()
{
stackLeft = new Stack<Character>();
stackRight = new Stack<Character>();
size = 0;
}
public void insert(char c)
{
size ++;
stackLeft.push(c); //This line returns NullPointerException
}
}
类缓冲区
{
私有堆栈堆栈左;
私有堆栈堆栈权;
私有整数大小;
缓冲区()
{
stackLeft=新堆栈();
stackRight=新堆栈();
尺寸=0;
}
公共空白插入(字符c)
{
大小++;
stackLeft.push(c);//此行返回NullPointerException
}
}
缓冲区()
{
Stack stackLeft=新堆栈();
Stack stackRight=新堆栈();
尺寸=0;
}
您需要将此更改为
Buffer()
{
stackLeft = new Stack<Character>();
stackRight = new Stack<Character>();
size = 0;
}
Buffer()
{
stackLeft=新堆栈();
stackRight=新堆栈();
尺寸=0;
}
它认为您正在Buffer()构造函数中创建新的局部变量,而不是实例化类字段 仅供参考,如果您通过调试器运行此程序,您将在大约90秒内准确地知道错误所在。@Cruncher我还没有真正适应调试器。这仅仅是我编程的第一年,我学了4个月的java。如果你定期编程,那么花1-2个小时学习调试器的方法,第一周就会有回报。它不仅能帮助你发现错误,还能教会你像机器一样思考。你可以更快地在头脑中跟踪程序,而不必去调试器。是的,当然。我将定义复制粘贴到构造函数中。我真傻。谢谢你的帮助!
stackLeft = new Stack<Character>();
stackRight = new Stack<Character>();
class Buffer
{
private Stack<Character> stackLeft;
private Stack<Character> stackRight;
private int size;
Buffer()
{
stackLeft = new Stack<Character>();
stackRight = new Stack<Character>();
size = 0;
}
public void insert(char c)
{
size ++;
stackLeft.push(c); //This line returns NullPointerException
}
}
Buffer()
{
Stack<Character> stackLeft = new Stack<Character>();
Stack<Character> stackRight = new Stack<Character>();
size = 0;
}
Buffer()
{
stackLeft = new Stack<Character>();
stackRight = new Stack<Character>();
size = 0;
}