黑马程序员技术交流社区

标题: 一不小心少写了 it.next().结果是出问题了。 [打印本页]

作者: 黑马张平    时间: 2012-4-12 08:20
标题: 一不小心少写了 it.next().结果是出问题了。
import java.util.*;

class GenericDemo6
{
        public static void main(String[] args)
        {
                ArrayList<String> al=new ArrayList<String>();
                al.add("abc1");
                al.add("abc2");
                al.add("abc3");
                al.add("abc4");
                coll(al);
                ArrayList<String> al1=new ArrayList<String>();
                al1.add("abc____1");
                al1.add("abc____2");
                al1.add("abc____3");
                al1.add("abc____4");
                coll(al1);
        }
        public static void sop(Object o)
        {
                System.out.println(o);
        }
        public static void coll(ArrayList<?> al)
        {
                for (Iterator<?> it=al.iterator();it.hasNext() ; )
                {
                        System.out.println(it.toString());
                }
        }
}
System.out.println(it.next().toString());
开始少了红色的it.next().

结果是:java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
java.util.ArrayList$Itr@c05d3b
一直不断重复。请问什么原理!
作者: 郑苑东    时间: 2012-4-12 08:37
指针一开始指向第一个的前面,没有next就会一直打印那个得地址,形成死循环。不会指向集合里面的第一个,自然也没有后面的。而第一个的类型就是小老鼠前面的,后面的是地址。
作者: 姜志钦    时间: 2012-4-12 08:39
it.next()是只进只读,前进一次就让it.hasNext()判断一次,读到没数据,it.hasNext()就为false,循环就停止了。而你没有加it.next()去遍历数组; it.hasNext()一直都处于true的状态,一直反复下去,就成死循环,就是出现你所说的这种状况。
作者: 李震 李震 李震    时间: 2012-4-12 08:44
  System.out.println(it.next().toString()); 应该放到for循环里面返回迭代的下一个元素。
  而你 System.out.println(it)是循环迭代器,找不到具体元素,所以出现死循环。
作者: 金兴    时间: 2012-4-12 08:49
for (Iterator<?> it=al.iterator();it.hasNext() ; )       //判断是否有下一个元素,有返回true,
                {
                        System.out.println(it.toString());   
                }
你原来那样做他不取值,不取就当还有,当然一直循环了。。。
所以你要加上it.next方法 返回下一个元素,可以通过重复调用此方法,直到hasNext()方法返回false,从而可以将集合中的所有元素遍历一次.

作者: 黑马张平    时间: 2012-4-12 09:11
3Q3Q3Q3Q3Q3Q




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2