我的java代码有什么问题?

时间:2013-02-20 14:22:09

标签: java nullpointerexception stack

我是java的新手,我正在尝试编写一个Linked-List Stack ..

public class Stack {

    private Node first;

    private class Node {
        int item;
        Node next;
    }

    public boolean IsEmpty()
    {
        return first==null;
    }

    public void push(int item)
    {
        Node oldfirst=first;
        first=new Node();
        first.item=item;
        first.next=oldfirst;
    }

    public int pop ()
    {
        int item=first.item;
        first=first.next;
        return item;
    }
}

import javax.swing.*;

public class main {

    public static void main(String[] args) {
        Stack ob=null;
        int num=0;
        while (true)
        {
            num=Integer.parseInt(JOptionPane.showInputDialog("Enter the number"));
            ob.push(num);
            if (num==0)
                break;
        }
        int k;
        k=ob.pop();
        JOptionPane.showMessageDialog(null, k);     
    }

现在当我输入编号通过编号时 一个Execption java.lang.NullPointerException 在main.main(main.java:18)

为什么会这样,以及如何避免它 请耐心等待,并提前致谢

3 个答案:

答案 0 :(得分:5)

调用push时,您的堆栈ob为空。你需要实例化它。而不是

Stack ob=null;

你需要

Stack ob = new Stack();

答案 1 :(得分:4)

您的代码:

Stack ob=null
...
ob.push(num);

obnull,您永远不会为其分配对象。在null上调用方法将始终生成NullPointerException

你可以这样解决:

Stack ob = new Stack();

答案 2 :(得分:0)

大多数例外都有一个不言自明的名称。例如,这是一个NullPointerException - 正在访问一个空对象并且正在调用异常。

您尝试将“ob”定义为新的Stack对象,尽管您只是将其定义为null。在定义和方法调用(ob.push())之间,ob不再被修改,因此它保持为null,从而导致异常。

要解决此问题,您需要确保在调用对象时该对象不为null。有两种方法可以解决错误。

首先,您可以实例化该对象。这将使程序按照您希望的方式工作。要执行此操作,只需定义对象,如下所示:Stack ob = new Stack();而不是Stack ob = null;

修复此问题的第二种方法是捕获错误。如果发生错误,这将使程序继续运行。我建议您在对象可能为空的情况下使用此功能,以便程序不会仅关闭。为此,请使用try-catch子句围绕该行:

try
{
    ob.push(num);
}
catch (NullPointerException e)
{
    System.out.println("Error at: ob.push(num);");
}