黑马程序员技术交流社区

标题: set 这么操作可以重复,啥子原因 [打印本页]

作者: ⑷嚸V恱    时间: 2013-8-19 20:51
标题: set 这么操作可以重复,啥子原因
本帖最后由 ⑷嚸V恱 于 2013-8-20 13:51 编辑

下面这么操作的话,set 可以打印出重复值,这是怎么回事 ,我哪里弄错了
Random r=new Random();
        for(int i=1;i<=10;i++)
        {
            int num=r.nextInt(20)+1;
            Set s=new HashSet<Integer>();
            
            while(!s.add(num)){
                num=r.nextInt(20)+1;
            }
            Iterator it=s.iterator();
            while(it.hasNext()){
                System.out.print(it.next()+",");
            }
            
        }

作者: 白堇翎    时间: 2013-8-19 21:46
for循环执行了10次 每次都创建一个新对象s,并且给s添加了一个元素
实际上你每次只给s集合添加了一个元素,所以打印出来的是不同的s集合内的元素
  1.                 Random r = new Random();
  2.                 for (int i = 1; i <= 10; i++) {
  3.                         int num = r.nextInt(20) + 1;
  4.                         Set s = new HashSet<Integer>();
  5.                         System.out.println(s);//在这里插入一个打印语句就知道为什么你每次打印出来都有相同元素了
  6.                         while (!s.add(num)) {
  7.                                 num = r.nextInt(20) + 1;
  8.                         }
  9.                         Iterator it = s.iterator();
  10.                         while (it.hasNext()) {
  11.                                 System.out.print(it.next() + ",");
  12.                         }

  13.                 }
复制代码
我修改了下 这样就OK了
  1.                 Random r = new Random();
  2.                 Set s = new HashSet<Integer>();
  3.                 while (s.size() < 10) {
  4.                         s.add(r.nextInt(21));
  5.                 }
  6.                 Iterator<Integer> it = s.iterator();
  7.                 while (it.hasNext())
  8.                         System.out.println(it.next());
  9.         }
复制代码





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