黑马程序员技术交流社区

标题: 大神看看为啥报错!!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 - 没有元素可以迭代。
  1.                 while(it.hasNext())
  2.                 {
  3.                         if(!a.contains(it.next()))
  4.                                 a.add(it.next());.//这地方报的这错误NoSuchElementException

  5.                 }
  6.                 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