黑马程序员技术交流社区

标题: 迭代的问题 [打印本页]

作者: 施天宇    时间: 2016-8-9 16:37
标题: 迭代的问题
错误代码:
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型啊,为什么会出错呢,大神求解!!!
作者: Maroon    时间: 2016-8-9 18:57
  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:58
Maroon 发表于 2016-8-9 18:57
while(it.hasNext()) {
                        //String s = it.next();
                        if(! ...

打错字了...你每调用一次it.next()方法
作者: 施天宇    时间: 2016-8-9 19:01
Maroon 发表于 2016-8-9 18:58
打错字了...你每调用一次it.next()方法

有道理....
作者: zhangjiesss    时间: 2016-8-9 21:29
学习啦,赞赞
作者: hexi5432    时间: 2016-8-9 21:41
这是啥呀?   学过但是基本忘记了咋办?
作者: life写实    时间: 2016-8-9 21:51
看得我有点晕。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2