2013-10-28 40 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()的值,然后检查变量的值。接下来写一些逻辑代码。