0

私はJavaが初めてで、配列スタックを書き込もうとしています pop()関数での浮気を避けたいのですが、

public class Stack {
private int[] s;
private int N=0;

public Stack(int capacity)
{
    s= new int [capacity];
}

public boolean IsEmpty ()
{
    return N==0;
}

public void push (int x)
{
    s[N++]=x;
}

public int pop ()
{
    int x=s[--N];
    s[N]=null;
    return x;
}

その値をデクリメントすると、スタックから取り除かれた要素へのポインターがまだあります。削除されたアイテムをnullに設定しようとしましたが、コンパイラーは例外を与えます

削除されたアイテムのポインターを削除するにはどうすればよいですか?!

4

3 に答える 3

1

int配列は参照ではない値を格納しておりnull、 type の有効な値ではありませんintObjectあなたが使用しているトリックは、またはなどの参照型の値を扱うときに便利ですString。あなたの場合、または0を空の要素に割り当てることはできますが、を割り当てることはできません。さらに、あなたの場合、値をそのままにしておくことができると思います:-1Integer.MIN_VALUEnull

public int pop ()
{
    return s [--N];
}
于 2013-02-20T18:42:15.333 に答える
0

ArrayList配列の代わりに を使用します。スタックの場合、常に最後になる指定された位置にあるオブジェクトを削除できます。

于 2013-02-20T18:43:12.357 に答える
0

プリミティブの配列は、ポインターではなくを格納するため、心配する必要のあるメモリ リークはありません。

この行:

s[N]=null;

Java では必要ありません (null有効なプリミティブ値ではないため、とにかくコンパイルしません)。

Java は C ではありません。

于 2013-02-20T18:47:51.327 に答える