黑马程序员技术交流社区
标题:
大神看看为啥报错!!ArrayList集合
[打印本页]
作者:
痞子、蔚
时间:
2014-7-21 11:05
标题:
大神看看为啥报错!!ArrayList集合
本帖最后由 痞子、蔚 于 2014-7-21 20:20 编辑
import java.util.*;
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class ArrayListTest2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(new Person("zhangsan01",20));
al.add(new Person("zhangsan02",21));
al.add(new Person("zhangsan03",23));
al.add(new Person("zhangsan02",21));
al.add(new Person("zhangsan01",20));
al=quChong(al);
sop(al);
}
public static ArrayList quChong(ArrayList al)
{
ArrayList a = new ArrayList();
Iterator it = al.iterator();
while(it.hasNext())
{
if(!a.contains(it.next()))
a.add(it.next());.//这地方报的这错误NoSuchElementException
}
return a;
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
作者:
爨庚轩
时间:
2014-7-21 11:11
本帖最后由 爨庚轩 于 2014-7-21 11:12 编辑
不对 看错了
作者:
黎志勇
时间:
2014-7-21 11:12
本帖最后由 黎志勇 于 2014-7-21 11:19 编辑
next
E next()返回迭代的下一个元素。
返回:
迭代的下一个元素。
抛出:
NoSuchElementException - 没有元素可以迭代。
while(it.hasNext())
{
if(!a.contains(it.next()))
a.add(it.next());.//这地方报的这错误NoSuchElementException
}
return a;
复制代码
每次执行一次 it.next() 就返回下一个迭代元素,这里你每循环一次,就调用两次it.next(),返回两个元素。
假如判断 it.hasNext() 的时候,还剩下一个元素,执行第一个it.next()的时候,就把最后一个元素返回出去了,到第二个it.next()的时候,就没有元素可以返回了,就报NoSuchElementException异常了。
可以弄一个临时变量把元素暂存一下,就不需要两次调用it.next()了。
作者:
ahuhxl
时间:
2014-7-21 11:18
while(it.hasNext())
{
Person p = (Person)it.next();//这地方定义一个变量接收it.next()
if(!a.contains(p))
a.add(p);
}
return a;
while(it.hasNext())
{
if(!a.contains(it.next()))//这地方已经取了下一个元素了
a.add(it.next());.//这地方又取了下一个元素,就是判断一次,连取两次,肯定会报异常
}
作者:
cheye0207
时间:
2014-7-21 15:02
调用了两次next了
作者:
357016138
时间:
2014-7-21 16:57
用ListIterator
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2