我已經在Java中實現了一個非常基本的Stack,它提供了以前從未遇到的奇怪錯誤。 代碼如下:Java中的簡單堆棧實現不起作用
public class Stack {
Node top;
int size;
public Stack() {top=null; size=0;}
public int pop() {
if(top!=null) {
int item = top.data;
top = top.next;
size--;
return item;
}
return -1;
}
public void push(int data) {
Node t = new Node(data);
t.next = this.top;
this.top = t;
size++;
}
public boolean isEmpty() {
return size<=0 ;
}
public int getSize() {
return size;
}
public int peek() {
return top.data;
}
public void printStack() {
Node n = this.top;
int pos = this.getSize();
while(pos>=0) {
System.out.println("Position: " + pos + " Element: " + n.data);
if(pos>0) {
n = n.next;
}
pos--;
}
}
}
class Node {
public int data;
public Node next;
Node(int d) {data=d; next=null;}
public int getData() {return data;}
}
class Tester {
public static void main(String[] args) {
Stack s = new Stack();
s.push(9);s.push(2);s.push(7);s.push(3);s.push(6);s.push(4);s.push(5);
System.out.println("Size is: " + s.getSize());
//s.printStack();
for (int i=0; i<s.getSize(); i++) {
System.out.print(s.pop()+ " ");
}
System.out.println();
}
}
我已徹底地測試,發現該推入操作的所有7個元素與下一個適當的/頂部指針集合中的正確的順序被推動完美。 但是,當我嘗試彈出所有元素時,只有它彈出前四(5-4-6-3),而留下其他元素。 於是,我試圖用上述方法進行printStack它就在那裏如下給出隨機NullPointerException異常錯誤:
run:
Position: 7 Element: 5
Position: 6 Element: 4
Position: 5 Element: 6
Position: 4 Element: 3
Exception in thread "main" java.lang.NullPointerException
Position: 3 Element: 7
Position: 2 Element: 2
at Stack.printStack(Stack.java:58)
Position: 1 Element: 9
at Tester.main(Stack.java:95)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
這些錯誤不會通過引入在推一些打印語句道理給我,而且( )和printStack()來跟蹤它開始拋出更多的隨機異常。 這些錯誤對於每次運行都是完全不確定的,並在不同的機器中給出不同的模式。 我用Netbeans調試器追蹤了一次完整的運行,發現沒有錯誤!
非常感謝您的幫助! 謝謝!
也許它沒有任何關係,但我會聲明pop和push方法同步。而且我也會在peek方法中驗證top不爲空 – BWitched 2012-04-28 10:20:42