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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ⑷嚸V恱 中级黑马   /  2013-8-19 20:51  /  1515 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ⑷嚸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()+",");
            }
            
        }

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

1 个回复

倒序浏览
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.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马