Java 与用于行为的堆栈
结果是432,我不知道为什么。for如何处理堆栈/队列/列表?我不想为这段代码寻找更好的选择(因为我已经知道了),我只是想知道这段代码是如何工作的Java 与用于行为的堆栈,java,stack,Java,Stack,结果是432,我不知道为什么。for如何处理堆栈/队列/列表?我不想为这段代码寻找更好的选择(因为我已经知道了),我只是想知道这段代码是如何工作的 class Stack_1 { public static void main(String [] args) { Stack s = new Stack(); List l= new LinkedList(); for(int i = 0; i < 5; i++)
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() );
}
}
类堆栈\u 1{
公共静态void main(字符串[]args){
堆栈s=新堆栈();
列表l=新的LinkedList();
对于(int i=0;i<5;i++)
s、 加(i);
对于(int i=0;i
如果您对最后一个循环感兴趣,它会重复5次,因为您要从0到堆栈的大小(如果您对此感到疑惑,第一个循环就是填充它的循环)。在每次迭代中,在堆栈上调用pop
,这将删除并返回顶部的元素。因此,在循环之前,堆栈是第一次迭代之后的[4,3,2,1,0]
,然后是[2,1,0]
,依此类推。在每次迭代中,您还打印删除的顶部值,这就是您在控制台上看到它的原因。循环终止后,堆栈将为空。希望有帮助。如果您对最后一个循环感兴趣,它会重复5次,因为您要从0到堆栈的大小(如果您对此感到疑惑,第一个循环就是填充它的循环)。在每次迭代中,在堆栈上调用pop
,这将删除并返回顶部的元素。因此,在循环之前,堆栈是第一次迭代之后的[4,3,2,1,0]
,然后是[2,1,0]
,依此类推。在每次迭代中,您还打印删除的顶部值,这就是您在控制台上看到它的原因。循环终止后,堆栈将为空。希望有帮助。这是一个有趣的观察结果。如果希望代码正确运行,请尝试以下操作:
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() );
Stack s=新堆栈();
列表l=新的LinkedList();
对于(int i=0;i<5;i++)
s、 加(i);
对于(int i=0;i
您希望最后一个循环运行的次数与堆栈中的元素相同;但是,通过使用pop(),堆栈大小不断变化。希望这有帮助。这是一个有趣的观察结果。如果希望代码正确运行,请尝试以下操作:
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() );
Stack s=新堆栈();
列表l=新的LinkedList();
对于(int i=0;i<5;i++)
s、 加(i);
对于(int i=0;i
您希望最后一个循环运行的次数与堆栈中的元素相同;但是,通过使用pop(),堆栈大小不断变化。希望这有帮助。
for
独立于数据结构运行。列表中没有任何内容(它的大小为0
,因此i
永远不会为真),因此第二个循环不会执行任何操作。你想做什么?这只是一个练习,你想得到它的输出(我没有编写代码),也就是(4 3 2),我不知道,因为第二个循环什么都不做,为什么输出不是4 3 2 1 0。for
独立于数据结构运行。列表中没有任何内容(它的大小为0
,因此i
永远不会为真),因此第二个循环不会执行任何操作。你想做什么?这只是一个练习,你想得到它的输出(我没有编写代码),也就是(4 3 2),我不知道,因为第二个循环什么都不做,为什么输出不是4 3 2 1 0。我解决了它,每次循环弹出一个数字,堆栈就会变小,所以当i=2时,2被打印出来,因此堆栈是[1,0]因此,当i=3时,它已经大于堆栈,因此循环停止。谢谢你的回答。我解决了它,每次循环弹出一个数字,堆栈就会变小,所以当I=2时,2被打印出来,因此堆栈是[1,0],所以当I=3时,它已经大于堆栈,所以循环停止。谢谢你的回答。