我正在实现minstack算法,并且遇到了一些奇怪的事情,也许我在这里错过了“某些堆栈概念”或“某些Java概念”。我正在使用两个堆栈(st和st2)来执行我的minstack操作。下面是我的弹出方法,在if条件下失败:
方法1-失败:
public void pop() {
if(st.pop() == st2.peek())
st2.pop();
}
下面是Pop方法,当我将st.pop()结果存储在变量'a'中时,它可以正常工作:
方法2-通过:
public void pop() {
int a = st.pop();
if(a == st2.peek())
st2.pop();
}
请假设两个堆栈中都有整数元素,并且st.pop()
中的值等于st2.peek()
。我想了解为何st.pop()
在将st.pop()
的结果存储到临时变量a
后,如果方法1的状态不能在方法1的状态下工作而在方法2可以工作的区别?>
答案 0 :(得分:2)
如果我理解正确的问题,则st.pop()
在第一种方法中不起作用,因为从未明确声明st中的元素类型(即st可以像Stack st = new Stack();
那样初始化)。 / p>
因此,任何对象(不必是int)都可以被压入堆栈,因此当弹出堆栈时,不清楚返回哪种数据类型,这将导致if语句失败。
在第二种方法中,将弹出的项目显式定义为变量a中的int,因此当与a进行比较时,if语句将按预期工作。