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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 施天宇 中级黑马   /  2016-8-9 16:37  /  575 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

错误代码:
package com.java.test;

import java.util.ArrayList;
import java.util.Iterator;

public class Test1_ArrayList {

        /**
         * ArrayList去除集合中字符串的重复值(字符串的内容相同)
         */
        public static void main(String[] args) {
                ArrayList<String> al = new ArrayList<>();
                al.add("a");
                al.add("b");
                al.add("c");
                al.add("e");
                al.add("a");
                al.add("b");
                al.add("a");
                ArrayList<String> a = new ArrayList<>();
                Iterator<String> it = al.iterator();
                while(it.hasNext()) {
                        //String s = it.next();
                        if(!a.contains(it.next())) {
                               
                                a.add(it.next());
                        }
                }
                System.out.println(a);
        }

}
会出现java.util.NoSuchElementException异常
正确代码:
package com.java.test;

import java.util.ArrayList;
import java.util.Iterator;

public class Test1_ArrayList {

        /**
         * ArrayList去除集合中字符串的重复值(字符串的内容相同)
         */
        public static void main(String[] args) {
                ArrayList<String> al = new ArrayList<>();
                al.add("a");
                al.add("b");
                al.add("c");
                al.add("e");
                al.add("a");
                al.add("b");
                al.add("a");
                ArrayList<String> a = new ArrayList<>();
                Iterator<String> it = al.iterator();
                while(it.hasNext()) {
                        String s = it.next();
                        if(!a.contains(s)) {
                               
                                a.add(s);
                        }
                }
                System.out.println(a);
        }

}
为什么需要先接收一下,我已经用了泛型,所以it.next()返回类型也是String型啊,为什么会出错呢,大神求解!!!

6 个回复

倒序浏览
  while(it.hasNext()) {
                        //String s = it.next();
                        if(!a.contains(it.next())) {
                                
                                a.add(it.next());
                        }
                }

在while里面,你没调用一次it.next()方法,指针就会往后面跳一次,所以你一次循环中跳了3次指针
回复 使用道具 举报
Maroon 发表于 2016-8-9 18:57
while(it.hasNext()) {
                        //String s = it.next();
                        if(! ...

打错字了...你每调用一次it.next()方法
回复 使用道具 举报
Maroon 发表于 2016-8-9 18:58
打错字了...你每调用一次it.next()方法

有道理....
回复 使用道具 举报
学习啦,赞赞
回复 使用道具 举报
这是啥呀?   学过但是基本忘记了咋办?
回复 使用道具 举报
看得我有点晕。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马