我的java代码有什么问题?

问题描述:

我在Java新,我试图写一个链表栈..我的java代码有什么问题?

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)

为什么发生这种情况,以及如何避免它 请耐心等待,在此先感谢

你的筹码ob为空当你调用推动。你需要实例化它。取而代之的

Stack ob=null; 

你需要有

Stack ob = new Stack(); 
+0

哇!我不知道如果你没有承包商,你可以像这样初始化它! – Coderji 2013-02-20 14:38:32

+0

@OsamaEspil如果你没有定义一个构造函数Java为你做。有关更多详细信息,请参阅此[回答](http://stackoverflow.com/a/4488766/264775)。 – thegrinner 2013-02-20 14:45:22

您的代码:

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

obnull,你从来没有一个对象分配给它。在null上调用方法将始终导致NullPointerException

你能解决这个问题是这样的:

Stack ob = new Stack(); 

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

您试图将“ob”定义为新的Stack对象,尽管您已将其简单地定义为null。在定义和方法调用(ob.push())之间,ob不会再被修改,因此它保持为空,导致异常。

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

首先,你可以实例化对象。这将使程序按照您希望的方式工作。要做到这一点,只需像这样定义对象:Stack ob = new Stack();而不是Stack ob = null;

解决这个问题的第二种方法是捕获错误。这会使程序在发生错误时继续执行。我建议您在有潜在的对象可能为为空时使用此选项,以便程序不会关闭。要做到这一点,围绕行try-catch-clause:

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

感谢您的支持^^ – Coderji 2013-02-20 14:41:40

+0

@OsamaEspil不客气 - 最好避免错误,但抓住它们不会让程序崩溃。 – 2013-02-20 14:44:43

+1

一般来说,你不应该抓住NPE;他们通常会指出编程错误,就像他们在@ Osama案中所做的一样。 – GriffeyDog 2013-02-20 15:09:56