0

我是java新手,现在我想写一个数组Stack我想避免在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 的有效值int。当您处理引用类型的值时,您使用的技巧很方便,例如Objector String。在您的情况下,您可以将0or分配给空元素,但不能分配. 此外,我认为在您的情况下,您可以按原样保留价值:-1Integer.MIN_VALUEnull

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

基元数组存储,而不是指针,因此您不必担心内存泄漏。

这一行:

s[N]=null;

在 java 中不需要(并且无论如何都不会编译,因为null它不是有效的原始值)。

Java 不是 C。

于 2013-02-20T18:47:51.327 回答
0

使用 anArrayList而不是数组。在那里,您可以删除指定位置的对象,如果是堆栈,这将始终是最后一个。

于 2013-02-20T18:43:12.357 回答