黑马程序员技术交流社区

标题: 大神求帮忙 看下这个集合程序到底哪里出错? [打印本页]

作者: 风语    时间: 2015-10-5 21:55
标题: 大神求帮忙 看下这个集合程序到底哪里出错?
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.Random;

  4. public class RandomDemo {

  5.         public static void main(String[] args) {
  6.                 //编写一个程序,获取10个1至100的随机数
  7.                 // 要求随机数不能重复,并把最终的随机数输出到控制台。
  8.         /*        思路   1.使用循环获取10个1-100的随机数
  9.          *       2.将获取的随机数存入集合
  10.          *       3.不能使随机数重复,重新定义一个临时集合看是否包含这个这个集合,否则不添加
  11.          *       4.遍历集合
  12.          */
  13.                 Random random = new Random();
  14.                 ArrayList<Integer> a1=new ArrayList<Integer>();
  15.                 Iterator<Integer> iterator = a1.iterator();
  16.                 for(int x=0;x<10;x++){
  17.                         int rd=random.nextInt(100);
  18.                         a1.add(rd);
  19.                 }
  20.                
  21.                 System.out.println("产生的10个随机数为:"+a1);
  22.                 ArrayList<Integer> a2=new ArrayList<Integer>();
  23.                 while(iterator.hasNext()){
  24.                         System.out.println("1");
  25.                         Integer i=iterator.next();//这里报错  为什么 怎么解决?
  26.                         if(!a2.contains(i)){
  27.                                 a2.add(i);
  28.                         }
  29.                 }
  30.                 for(Object o:a2){
  31.                         System.out.println("不重复的10个随机数为:"+o);
  32.                 }
  33.                
  34.         }

  35. }
复制代码
到底什么问题?好纠结。。。
作者: zq19910303    时间: 2015-10-6 11:14
本帖最后由 zq19910303 于 2015-10-6 11:17 编辑

这是因为迭代器Iterator有个使用限制:创建出迭代器和使用迭代器进行遍历的过程中,集合不能进行添加或删除的动作,要想删除必须用Iterator的remove()方法。
你这里会出现错误就是因为第17行创建出iterator对象到27行对集合进行遍历的过程中,集合进行了添加元素的动作。只要把17行移到21行与25行之间就行了。
作者: 月影千华    时间: 2015-10-6 13:06
17行移到for循环下面.
作者: 吾要娶她    时间: 2015-10-6 17:52
你这个对集合进行了操作 2种解决办法 要么用ListIterator 还有一种貌似普通for循环遍历集合的时候,我们通过集合对元素进行操作
作者: itheima_casper    时间: 2015-10-6 19:35
关于27行的问题: 注意迭代器的用法。要先把数据存进集合,然后在创建迭代器。 注意顺序。
另:
1.  这功能的实现思路有问题啊,如果a1取得的是10个 0, 那你的a2 就只有一个随机数了!  
2.  关于Random:注意nextInt方法的说明,如果要产生1-100的随机数,应该是nextInt(1,101)

我的疑问:希望有人能答疑
     创建一个空集合的Iterator,  第一次调用hasNext是 false。  但如果在创建空迭代器之后再添加数据到集合,这时第一次调用hasNext为什么是true。看源码表示有点晕




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