我是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)
为什么会这样,以及如何避免它 请耐心等待,并提前致谢
答案 0 :(得分:5)
调用push时,您的堆栈ob
为空。你需要实例化它。而不是
Stack ob=null;
你需要
Stack ob = new Stack();
答案 1 :(得分:4)
您的代码:
Stack ob=null
...
ob.push(num);
ob
是null
,您永远不会为其分配对象。在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);");
}