2013-10-28 42 views
0

我是JAVA n00b。我正試圖在Java中實現一個堆棧數據結構。 push,peek和display的算法工作正常。該pop算法不按預期工作:堆棧實現的彈出操作未按預期工作

public int pop() { 
    int temp; 
    if(isEmpty()) 
     return -1; 
    else { 
     temp = arr[topElem]; 
     topElem--; // points to the top most element in the stack 
     count--; // keeps track of the total number of elements in the stack 
     return temp; 
    } 
} 

caseswitch聲明此算法如下: -

case 2: 
    if(st.pop()==-1) 
     System.out.println("The stack is empty."); 
    else 
     System.out.printf("The element popped is %d\n",st.pop()); 
    break; 

如果輸入的元素是(按順序): - 1 2 4 然後在第一次調用pop時,彈出2,然後只有1保留在堆棧中。我能夠理解什麼可能是錯誤的,但無法在代碼中找到它。

+2

返回'-1'指示堆棧爲空不是好主意,如果要將int'-1'放在堆棧上怎麼辦?在一個空棧上調用'pop()'更好地拋出Exception。 – MrSmith42

+2

你叫兩次彈出! –

回答

3

問題是,你打電話pop兩次(一次在st.pop() == -1,一次在printf)。

您應該更改您的代碼是這樣的:

int value = st.pop(); 
if (value == -1) 
    System.out.println("The stack is empty."); 
else 
    System.out.printf("The element popped is %d\n", value); 
+0

我在想這可能是一個問題,但沒有信心去實際嘗試。謝謝 – kusur

0

你打電話流行的兩倍。

第一是:

if(st.pop()==-1) 
     System.out.println("The stack is empty."); 

,第二個是:

System.out.printf("The element popped is %d\n",st.pop()); 

你可以使用一個變量來存儲的st.pop()的值,然後檢查變量的值。接下來寫一些邏輯代碼。