我正在实现 minstack算法和一些奇怪的东西,也许我在这里遗漏了“一些堆栈概念”或“一些 Java 概念”。我正在使用两个堆栈(st 和 st2)来执行我的 minstack 操作。下面是我的 pop 方法,它在 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()
在方法 1 的状态下不起作用,而在存储 st.pop()< 的结果后在方法 2 中起作用的区别
到一个临时变量 a
最佳答案
如果我理解问题正确,st.pop()
在第一种方法中不起作用,因为 st 中的元素类型从未明确说明(即 st 可以像 Stack st = new Stack();
).
因此,任何对象(不必是 int)都可以被压入堆栈,因此当弹出堆栈时,返回的数据类型不清楚,这会导致 if 语句失败。
在第二种方法中,弹出的项目在变量a中被显式定义为一个int,所以当与a进行比较时,if语句按预期工作。
关于java - 具有两个在 Pop 条件下失败的堆栈的 minstack 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147363/