Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java堆栈推送方法NullPointerException_Java_Nullpointerexception_Stack_Character - Fatal编程技术网

Java堆栈推送方法NullPointerException

Java堆栈推送方法NullPointerException,java,nullpointerexception,stack,character,Java,Nullpointerexception,Stack,Character,我正在实现一个具有两个堆栈的字符缓冲区。我正在使用insert()方法插入一个元素: 所有这些都返回一个空异常。断言字符到达方法内部是正确的。我使用java.util.Stack;当它失败时,我实现了自己的。但还是失败了。 我可能做错了什么? 感谢您的任何帮助 使用构造函数中的以下行: Stack<Character> stackLeft = new Stack<Character>(); Stack<Character> stackRight = ne

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

所有这些都返回一个空异常。断言字符到达方法内部是正确的。我使用java.util.Stack;当它失败时,我实现了自己的。但还是失败了。
我可能做错了什么?

感谢您的任何帮助

使用构造函数中的以下行:

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;
}