A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 痞子、蔚 初级黑马   /  2014-7-21 11:05  /  1175 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 痞子、蔚 于 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);
        }
}

6 个回复

倒序浏览
本帖最后由 爨庚轩 于 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()了。
回复 使用道具 举报
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());.//这地方又取了下一个元素,就是判断一次,连取两次,肯定会报异常

                }
回复 使用道具 举报
调用了两次next了
回复 使用道具 举报
用ListIterator

点评

恩恩,这个问题直接使用listiterator就搞定了!在迭代过程中要操作元素,Iterator有局限性,要使用listIterator!!!  发表于 2014-7-21 19:35
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马