黑马程序员技术交流社区
标题:
各位大虾帮我解决下链表的问题
[打印本页]
作者:
创出一片辉煌
时间:
2012-8-8 22:34
标题:
各位大虾帮我解决下链表的问题
import java.util.LinkedList;
public class LinkedDemo
{
public static void main(String args[]){
LinkedList<String> link=new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C"); //在链表中添加三个元素
System.out.println(link.size());//link.size()等于3
//用先进先出的方式打印输出,循环三次,输出三个元素
for(int i=0;i<link.size();i++){
System.out.print(link.poll()+",");
}//此处若打印link.size()的值还是1 ,为什么还剩一个??
/* int a=link.size();
System.out.println(a);
for(int i=0;i<a;i++){
System.out.print(i+",");
System.out.print(link.poll()+",");
}*/
}
}
//这里就出现问题了,这个链表里面就三个元素,link.size()又确实等于3
//可是为什么我循环三次只能输出两个呢??而我用把link.size()的返回的值
//赋给一个变量,在进行循环却能全部输出,这是为什么呢?能画图解释一下最好!
作者:
创出一片辉煌
时间:
2012-8-8 22:37
若不赋值给变量进行循环的话,
for(int i=0;i<link.size()+2;i++){
System.out.print(link.poll()+",");
}
为什么要循环5次
作者:
周坤
时间:
2012-8-8 23:01
问题出在for循环上。
for(int i=0;i<link.size();i++){
System.out.print(link.poll()+",");
这个方法,link.poll()会改变link.siza()的大小,所以循环一次之后,link.size()就变成了2了,此时i=1,进行判断,可以进入循环体。
依此推,下一次就不能满足循环的条件了。
应该可以明白了。
作者:
黑马振鹏
时间:
2012-8-8 23:02
直接看例子:
for(int i=0;i<3;i++){
System.out.println(link.poll()+","+i);
}
打印:
A,0
B,1
C,2
肯定是正常的,这个毫无疑问。
看你说的那种情况
我添加两行代码:
for(int i=0;i<link.size();i++){
System.out.println(link.size()+" link.size()---------before pool");//观察去掉之前的长度
System.out.println(link.poll()+","+i);
System.out.println(link.size()+" link.size()-----after pool");//观察去掉之后的长度
}
打印:
3 link.size()---------before pool
A,0
2 link.size()-----after pool
2 link.size()---------before pool
B,1
1 link.size()-----after pool
最后一次当link.size()=1的时候,此时i=1
这样不满足循环条件所,所以就会出现剩下一个的情况
作者:
潘星
时间:
2012-8-9 03:34
一下红色部分是我做的修改,希望对楼主有帮助
import java.util.LinkedList;
public class LinkedDemo
{
public static void main(String args[])
{
LinkedList<String> link=new LinkedList<String>();
link.add("A");
link.add("B");
link.add("C"); //在链表中添加三个元素
System.out.println(link.size());//link.size()等于3
//用先进先出的方式打印输出,循环三次,输出三个元素
for(int i=0;i<link.size();i++) //
因为这里的link.size()的值是变化的,
当i=0时,执行link.poll()这句话,获取并移除了此列表的第一个元素,也就是"A",
结合中只剩2个元素了,"B"和"C",此时link.size()变成了2,因为元素少了一个,
而i自增变成了1,循环的条件还满足,又执行了link.poll()这句话,获取并移除了
"B"元素,此时link.size()的值为1了,而i自增为2了,条件不满足循环结束,所以
结果当然是输出2个元素。
{
System.out.print(link.poll()+",");
}//此处若打印link.size()的值还是1 ,为什么还剩一个??
/* int a=link.size();
System.out.println(a);
for(int i=0;i<a;i++){
因为你这里的a的值始终为3,所以可以循环3次,取出3个元素,虽然集合的长度在变化,
但是在for循环里面的控制循环次数的值没改变。
System.out.print(i+",");
System.out.print(link.poll()+",");
}*/
}
}
//这里就出现问题了,这个链表里面就三个元素,link.size()又确实等于3
//可是为什么我循环三次只能输出两个呢??而我用把link.size()的返回的值
//赋给一个变量,在进行循环却能全部输出,这是为什么呢?能画图解释一下最好!
理解好poll方法跟for循环这个问题就很好理解了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2