这令我感到非常困惑和沮丧。我已经就同一个计划提出了一个问题here。关闭那段代码,我还有另外一个Stack的问题。这是一个使用上一篇文章中称为块的堆栈数组的方法:
static void pileOnto(int sBlock, int rBlock)
{
boolean flag = true;
while ((!blocks[rBlock].empty()) && (flag))
{
retainer.push((Integer)blocks[sBlock].pop());
if (((Integer)blocks[rBlock].peek()).intValue() == sBlock) {flag = false;}
}
while (((Integer)blocks[rBlock].peek()).intValue() != rBlock)
{
returnBlock(((Integer)blocks[rBlock].pop()).intValue());
}
}
第一个while循环应该在堆栈为空时结束,或者当它弹出的最后一个Integer与sBlock相同时。我遇到的问题是块[rBlock] .empty()永远不会返回true,即使程序因尝试弹出块[rBlock]而崩溃,这意味着堆栈中不能有任何内容。有人可以向我解释发生了什么事吗?
答案 0 :(得分:2)
在第一个循环中,您正在测试一个堆栈(即blocks[rBlock].empty()
)并弹出一个不同的堆栈(即blocks[sBlock].pop()
)。