结果是4 3 2,我不知道为什么。如何使用堆栈/队列/列表?我没有为这段代码寻找更好的选择(因为我已经知道了)我只是想知道这个是如何工作的。
class Stack_1 {
public static void main(String [] args) {
Stack s = new Stack();
List l= new LinkedList();
for(int i = 0; i < 5; i++)
s.add(i);
for(int i = 0; i < l.size(); i++)
s.push(l.remove(i));//this does nothing
for(int i = 0; i < s.size(); i++)
System.out.print(" "+ s.pop() );
}
}
答案 0 :(得分:1)
如果你对最后一个循环感兴趣,它会迭代5次,因为你从0到堆栈的大小(如果你想知道这个,第一个循环是填充它的那个)。在每次迭代中,您在堆栈上调用pop
,这将删除并返回顶部的元素。因此,在循环之前,在第一次迭代[4,3,2,1,0]
之后,您的堆栈为[3,2,1,0]
,然后是[2,1,0]
,依此类推。在每次迭代中,您还会打印删除的最高值,这就是您在控制台上看到它的原因。循环结束后,您的堆栈将为空。希望它有所帮助。
答案 1 :(得分:1)
这是一个有趣的观察。如果您希望代码正常运行,请尝试以下操作:
Stack s = new Stack();
List l= new LinkedList();
for(int i = 0; i < 5; i++)
s.add(i);
for(int i = 0; i < l.size(); i++)
s.push(l.remove(i));//this does nothing
int stackSize = s.size();
for(int i = 0; i < stackSize; i++)
System.out.print(" "+ s.pop() );
您希望最后一个循环的运行次数与堆栈中的元素一样多;但是,使用pop()不断改变堆栈大小。希望这会有所帮助。