黑马程序员技术交流社区
标题:
for迭代问题【已解决】
[打印本页]
作者:
刘佳
时间:
2012-8-23 18:06
标题:
for迭代问题【已解决】
本帖最后由 刘佳 于 2012-8-23 19:27 编辑
import java.util.*;
class ArrayListTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static ArrayList singleElement(ArrayList al)
{
ArrayList newAl = new ArrayList();
for (Iterator it = al.iterator(); it.hasNext(); )
{
if(!newAl.contains(it.next()))
newAl.add(it.next());
}
return newAl;
}
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
sop(al);
al = singleElement(al);
sop(al);
}
}
为何我将while迭代换成for的以后,打印结果不对呢,上面的for迭代哪里出错了?
作者:
唐杨老师
时间:
2012-8-23 18:45
for (Iterator it = al.iterator(); it.hasNext(); )
{
if(!newAl.contains(it.next())) //这里的it.next()是取得下一个元素并返回元素值,内部指针向后移动一位
newAl.add(it.next()); //
而这里add的就是it的再下一个值了,因为上一个值被用来判断了.所以每循环一次少一个
}
解决方法:定义成一个变量,然后调用该变量的引用,如下
for (Iterator it = al.iterator(); it.hasNext(); )
{ Object obj = it.next();
if(!newAl.contains(obj))
newAl.add(obj);
}
作者:
杜鹏云
时间:
2012-8-23 19:20
for (Iterator<String> it = al.iterator(); it.hasNext();) {
String s="";
if(!newAl.contains((s=it.next())))//it.next()函数每调用一次指针自动向后移动一位,所以你原来的代码,是两次间隔的取元素所以结果自然不一样。你应该把每次next的结果保存下来!
newAl.add(s);
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2