2013-02-20 123 views
0

我新的Java和我试图写一个阵列堆栈 现在我想避免弹出()函数游荡,如何删除一个指针数组中的元素的java

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; 
} 

时它递减该值,仍有指针 到已现脱下堆栈中的元素我试图设置已删除项目为空 但是编译器给了我异常

我能以删除办被删除项目的指针?!

+1

哪个指针?你在这里使用原语('int'),而不是使用对象 – SJuan76 2013-02-20 18:40:23

+0

你应该只保留代表栈顶的数组索引。我认为你正在用'N'做什么。 – 2013-02-20 18:41:19

+0

您不能将基元(如int)设置为null。只有'Object'的后代可以是'null'。只需在'pop()'中减少计数器('N')就可以了,并且一定要在'push()'中正确设置最后一个堆栈元素。 – iamnotmaynard 2013-02-20 18:48:09

回答

1

您的数组存储的数值不是int,而且null对于int类型不是有效值。当您处理参考类型的值时,您正在使用的技巧非常方便,如ObjectString。在您的情况下,您可以将0-1Integer.MIN_VALUE分配给空元素,但不能分配null。此外,我觉得你的情况,你可以一走了之值是:

public int pop() 
{ 
    return s [--N]; 
} 
+0

非常感谢您的帮助 – Coderji 2013-02-20 18:48:11

0

使用的ArrayList而不是数组。在堆栈的情况下,您可以在指定的位置移除对象,这将永远是最后一个对象。

0

数组原始存储,而不是指针,所以你没有内存泄漏你不必担心。

这条线:

s[N]=null; 

没有在所需的java(反正不编译因为null不是有效的原始值)。

Java不是C.