黑马程序员技术交流社区

标题: 为什么会生成一样的数? [打印本页]

作者: aoejhx    时间: 2016-1-12 11:24
标题: 为什么会生成一样的数?
public static void main(String[] args) {
       
                for (int i = 0; i <=10 ; ) {
                       
                Random r =new Random();
               
                HashSet<Integer> hs = new HashSet<>();
               
                if(hs.add(r.nextInt(20)+1))
                    i++;
                System.out.print(hs);
                }
        }
}
作者: 正阳门下    时间: 2016-1-12 17:36
奇怪了,可能你需要看下hashcode或equals方法是不是重写了
作者: 胆小的狙击手    时间: 2016-1-12 19:36
你创建了10个HashSet,往10个HashSet中添加一个数字再打印,而不是往一个Set里添加是个数字,当然有可能出现重复的了
作者: 正阳门下    时间: 2016-1-13 00:34
public static void main(String[] args) {
        
               //demo1();
                        HashSet<Integer> hs = new HashSet<>();
                        Random r = new Random();
                        for (int i = 0; i < 10; i++) {
                                hs.add(r.nextInt(20));
                        }
                        System.out.println(hs);
        }
原因是因为你把建立集合放到了for循环里面,等于是你建立了十个集合,所以会出现重复的数字;起初没注意看,还以为是没重写方法,后来想了想,这些基本数据都是写好了的.
作者: OliverLC    时间: 2016-1-13 01:55
原因是,你这个代码其实是创建了11个HashSet集合,每次就遍历往一个集合里加一个元素,尽管HashSet具有元素不重复的特点,但是前提是在同一个集合里的元素,而你这得到的结果是11个集合里每个集合的第一个元素的值~所以就可能出现重复的值.
作者: aoejhx    时间: 2016-1-13 10:35
哦,明白了。谢谢楼上各位的解答




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