2015-10-15 88 views
0

當我嘗試測試這個;例如,如果我推4個元素,然後創建一個for循環:我的Stack類中的Pop或Push方法寫錯了嗎?

for(int i=0; i<=stack.size(); i++){ 
System.out.println(stack.pop()); 
} 

它不輸出最後一個元素。這是我的流行方法的問題嗎?

public void push(E element){ 
    top= new Node<E>(element,top); 
    size++; 

} 

public E pop(){ 
    E popped; 
    if(this.isEmpty()){ 
     throw new EmptyStackException(); 
    } 
    popped=top.data; 
    this.setTop(top.next); 
    size--; 
    return popped; 
    } 
+2

我覺得你需要展示整個班級。使用'<='而不是'<'應該拋出異常。 –

+1

您期望打印多少個元素?順便說一句,你迭代'stack.size()+ 1'次... –

+0

請注意代碼更清楚 –

回答

3

問題是你通過你的堆棧大小迭代。

只是看到你發生什麼事的for循環:

  1. 我= 0;大小= 4; i < = size == true
  2. i = 1;大小= 3; i < = size == true
  3. i = 2;大小= 2; i < = size == true
  4. i = 3;大小= 1;我< =大小==假

所以你不彈出最後一個元素。

但是,而不是使用與大小限制循環應該實現一個hasNext()方法,即返回true,如果棧有下一個元素:

while(stack.hasNext()) 
{ 
    Element e = stack.pop(); 
    // Do stuff... 
} 

或者pop()返回NULL如果沒有更多的元素在堆棧上,你遍歷這樣的:

Element e; 
while((e = stack.pop()) != null) 
{ 
    // Do stuff... 
} 
+0

我會,因爲它是一個暫時的想法,你應該做.size()+ 1; –

+0

在這麼多的層面上,這將更加錯誤,我無法以評論形式寫出它們。此外,它根本不能解決問題,因爲它將是0,5(true) - > 1,4(true) - > 2,3(true) - > 3,2(false,循環停止)。所以你仍然只會彈出三個元素。這裏的問題是,當您循環時,堆棧的大小會減小。 –

0

如果使用.pop()您的變量裏的1較少,因此wwould會更好,如果你在你的循環回合結束離開了增量的大小:

for(int i=0; i<=stack.size();){ 
    System.out.println(stack.pop()); 
}