黑马程序员技术交流社区
标题:
关于for和whiler的小问题。
[打印本页]
作者:
叶征东
时间:
2012-8-10 21:47
标题:
关于for和whiler的小问题。
import java.util.*;
class Demo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
method_2();
System.out.println("Holle world");
}
public static void method_2()
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
al.add("java05");
al.add("java06");
ListIterator li=al.listIterator();
sop("hasNext:"+li.hasNext());
sop("hasPrevious:"+li.hasPrevious());
for(;li.hasNext();){}
//
我只想遍历完集合中的元素,但是如果这样写的话,程序会在这儿无限循环,下面的语句就执行不到了。我将这句话换成while(li.hasNext()){},结果也是一样的。如果在{}里面加上
Object obj=li.next();
if(obj.equals("java04"))
{
li.add("java009");
sop("添加后的集合是:"+al);
}
这样的语句后,就正常了。请问这是为什么?如果我只想遍历完集合中的元素,我该怎么写?
sop("hasNext1:"+li.hasNext());
sop("hasPrevious1:"+li.hasPrevious());
}
}
作者:
杨文宇
时间:
2012-8-10 22:04
//这是源代码
public boolean hasNext() {
return cursor != size();//指针不等于size,返回布尔值 ,注意:指针没有向下移动
}
public E next() {
checkForComodification();
try {
E next = get(cursor);//先取值
lastRet = cursor++;//指针后加1
return next;//返回内容
} catch (IndexOutOfBoundsException e) {
checkForComodification();
throw new NoSuchElementException();
}
}
意思就是说,hasNext()只判断集合还有没有下一个元素,如果有,则返回true,没有则为false,它的指针没有向下移动。
而next()先取值,然后指针向下移动,
如果你那样写的话,它的指针永远没有向下移动,只会永远返回true,所以就无限循环了
作者:
焦晨光
时间:
2012-8-10 22:13
本帖最后由 焦晨光 于 2012-8-10 22:15 编辑
for(;li.hasNext();){}//
我只想遍历完集合中的元素,但是如果这样写的话,
程序会在这儿无限循环,下面的语句就执行不到了。
我将这句话换成while(li.hasNext()){},结果也是一样的。
for(;li.hasNext();){} //li.hasNext()返回的是布尔值 false和true 因为你循环体是空的,指针不会移动,所以一直返回true
while(li.hasNext()){}//类似于 while(true){}和上面的语句是同样的道理
Object obj=li.next();
if(obj.equals("java04"))
{
li.add("java009");
sop("添加后的集合是:"+al);
}
如果在{}里面加上这样的语句后,就正常了。请问这是为什么?
该语句块中定义了指针,后面的equals方法进行判断,每执行一次循环,指针都向下移动,所以情况改变。
Object obj=li.next();
如果我只想遍历完集合中的元素,我该怎么写?
很简单
{
ListIterator li=al.listIterator();
while(li.hasNext())
{
System.out.println(li.next());
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2