2013-10-23 34 views
0

我有一個方法,我使用了其他很多的類,包括一個鏈表,一個隊列和一個棧。在我的方法中,我有一個for循環,我想彈出我的棧(方便地命名爲s),並將我的隊列(方便地命名爲q)出隊到s1和q1中。出於某種原因,出隊正在搞亂程序,而循環只運行一半的次數。下面是一些代碼來說明這一點影響循環的出列方法(Java)

public E dequeue() { 

    if (manyItems == 0) { 
     return null; 
    } 
    SNode<E> temp = front; 
    front = front.getNext(); 
    manyItems--; 
    return (E) temp.getElement(); 

} 

我還想說,我測試了我的整個隊列類早些時候在節目中有一個整數隊列它完美地工作,包括出隊。我不確定有什麼問題。如果我沒有足夠清楚或者需要提供更多代碼(還有很多,我只是包含關鍵部分),請告訴我。謝謝!

+0

創建[SSCCE(http://sscce.org/) –

+0

當你說q.dequeue(),我想這會改變q的大小,以便q.getManyItems()將返回一個更小的尺寸。所以循環最終會比你期望的更早結束。 – Rami

+0

你的問題是一個循環,你只是編輯你的問題,擺脫問題代碼!? –

回答

3

您的循環正在中途完成,因爲您每次都通過循環遞增j並遞減隊列的大小。當隊列被清空一半時,這兩個計數器交叉。

你可能想這樣的:

while (q.getManyItems() > 0) { 
    s1 = s.pop(); 
    q1 = q.dequeue();//*** 
} 

如果你需要保持for循環使用計數器(因爲在你還沒有表現出我們的循環體其他的東西),更改代碼:

final int count = q.getManyItems(); 
for (int j = 0; j < count; j++) { 
    s1 = s.pop(); 
    q1 = q.dequeue();//*** 
}