0

私は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);     
    }

main.main(main.java:18) で Execption java.lang.NullPointerException を介してコンパイラに数値を入力すると、

この問題が発生する理由と回避方法 しばらくお待ちください。

4

3 に答える 3

5

pushを呼び出すと、スタックobはnullになります。インスタンス化する必要があります。それ以外の

Stack ob=null;

あなたが持っている必要があります

Stack ob = new Stack();
于 2013-02-20T14:23:33.553 に答える
4

あなたのコード:

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

obnull、オブジェクトを割り当てることはありません。上のメソッドを呼び出すと、null常に。になりNullPointerExceptionます。

次のように修正できます。

Stack ob = new Stack();
于 2013-02-20T14:23:09.210 に答える
0

ほとんどの例外には、わかりやすい名前が付いています。たとえば、これはNullPointerExceptionです。アクセスされているnullオブジェクトがあり、例外が呼び出されています。

「ob」を新しいStackオブジェクトとして定義しようとしていますが、単にnullとして定義しています。定義とメソッド呼び出し(ob.push())の間で、obは再度変更されないため、nullのままになり、例外が発生します。

これを修正するには、オブジェクトを呼び出すときにオブジェクトがnullでないことを確認する必要があります。エラーを修正するには2つの方法があります。

まず、オブジェクトをインスタンス化できます。これにより、プログラムは希望どおりに機能します。Stack ob = new Stack();これを行うには、オブジェクトを。ではなく次のように定義するだけですStack ob = null;

これを修正する2番目の方法は、エラーをキャッチすることです。これにより、エラーが発生した場合でもプログラムが続行できるようになります。プログラムが単にシャットダウンしないように、オブジェクトがnullになる可能性がある場合は常にこれを使用することをお勧めします。これを行うには、行をtry-catch-clauseで囲みます。

try
{
    ob.push(num);
}
catch (NullPointerException e)
{
    System.out.println("Error at: ob.push(num);");
}
于 2013-02-20T14:36:33.503 に答える