我是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;
}
}
此算法的case
语句中的switch
如下: -
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个保留在堆栈中。我能够理解可能出现的问题,但无法在代码中找到它。
答案 0 :(得分: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);
答案 1 :(得分: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()
的值,然后检查变量的值。接下来写一些逻辑代码。