黑马程序员技术交流社区

标题: 求0-9之间的随机数,求大神指点 [打印本页]

作者: songyu    时间: 2015-6-16 16:20
标题: 求0-9之间的随机数,求大神指点
  1. import java.util.HashSet;
  2. import java.util.Random;


  3. public class Demo {

  4.        
  5.         public static void main(String[] args) {
  6.                
  7.                
  8.                 HashSet<Integer> set = new HashSet<Integer>();
  9.                
  10.                 while(set.size()<10){
  11.                        
  12.                         Random random = new Random();
  13.                        
  14.                         int number = random.nextInt(10);
  15.                        
  16.                         set.add(number);
  17.                        
  18.                 }
  19.                 System.out.println(set);

  20.         }

  21. }
复制代码
明明用到了Random为什么运行时不是随机的!

作者: 银哥    时间: 2015-6-16 16:58
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
你定义的长度有10个数,所以出现1到10
set的特点就是会自带排序,所以打印出的结果是有序的,你用arraylist就不会这样了
作者: songyu    时间: 2015-6-16 17:13
银哥 发表于 2015-6-16 16:58
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
你定义的长度有10个数,所以出现1到10
set的特点就是会自带排序,所以打印出 ...

set 集合不是无序并且元素唯一的吗.
作者: songyu    时间: 2015-6-16 17:14
银哥 发表于 2015-6-16 16:58
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
你定义的长度有10个数,所以出现1到10
set的特点就是会自带排序,所以打印出 ...

set集合不是无序元素唯一的吗?
作者: 银哥    时间: 2015-6-16 17:18
songyu 发表于 2015-6-16 17:14
set集合不是无序元素唯一的吗?

无序是指放入和拿出的顺序不一样
比如你放的是9 0 1 3 2 4 6 5 7 8
由于set会排序  所以拿出的顺序是0, 1, 2, 3, 4, 5, 6, 7, 8, 9


作者: 日薄星回    时间: 2015-6-16 17:27
今天的视频,看了居然没记住!我深感失望,不过在此重温,激动!
作者: songyu    时间: 2015-6-16 17:43
银哥 发表于 2015-6-16 17:18
无序是指放入和拿出的顺序不一样
比如你放的是9 0 1 3 2 4 6 5 7 8
由于set会排序  所以拿出的顺序是0, 1 ...

好吧,我再试试
作者: songyu    时间: 2015-6-16 17:45
日薄星回 发表于 2015-6-16 17:27
今天的视频,看了居然没记住!我深感失望,不过在此重温,激动!

多练,多练.
作者: guohaichang    时间: 2015-6-16 19:04
不是Random的问题,是HashSet集合的问题。你可以直接循环输出随机元素,二不用HashSet集合,就能得到随机结果。还可以放大数的范围,比如随机到100,输出时除10,也可得到随机结果。原因在于HashSet集合内部默认排序方式,它是有利于随机查找的散列(hash)的顺序排列的,而不是元素加入顺序。便利顺序跟hashCode()有关,却也不是按照hashCode()值遍历的。
作者: guohaichang    时间: 2015-6-16 19:07
不是Random的问题,是HashSet集合的问题。你可以直接循环输出随机元素,二不用HashSet集合,就能得到随机结果。还可以放大数的范围,比如随机到100,输出时除10,也可得到随机结果。原因在于HashSet集合内部默认排序方式,它是有利于随机查找的散列(hash)的顺序排列的,而不是元素加入顺序。便利顺序跟hashCode()有关,却也不是按照hashCode()值遍历的。
作者: guohaichang    时间: 2015-6-16 19:09
银哥 发表于 2015-6-16 17:18
无序是指放入和拿出的顺序不一样
比如你放的是9 0 1 3 2 4 6 5 7 8
由于set会排序  所以拿出的顺序是0, 1 ...

银哥说的不对吧,默认自然顺序。可以自定义排序准则,而非放入拿出的顺序。
作者: a13783559191    时间: 2015-6-16 20:27
package test;
作者: leiyong    时间: 2015-6-16 22:02
方法1 (数据类型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math.random()*(10-1+1)) 从1到10的int型随数 方法2 获得随机数 for (int i=0;i<30;i++) {System.out.println((int)(1+Math.random()*10));} (int)(1+Math.random()*10) 通过java.Math包的random方法得到1-10的int随机数 公式是:最小值---最大值(整数)的随机数 (类型)最小值+Math.random()*最大值 方法3 Random ra =new Random(); for (int i=0;i<30;i++) {System.out.println(ra.nextInt(10)+1);} 通过java.util包中的Random类的nextInt方法来得到1-10的int随机数
作者: leiyong    时间: 2015-6-16 22:04
方法1
(数据类型)(最小值+Math.random()*(最大值-最小值+1))
例:
(int)(1+Math.random()*(10-1+1))
从1到10的int型随数
方法2
获得随机数
for (int i=0;i<30;i++)
{System.out.println((int)(1+Math.random()*10));}
(int)(1+Math.random()*10)
通过java.Math包的random方法得到1-10的int随机数
公式是:最小值---最大值(整数)的随机数
(类型)最小值+Math.random()*最大值
方法3
Random ra =new Random();
for (int i=0;i<30;i++)
{System.out.println(ra.nextInt(10)+1);}
通过java.util包中的Random类的nextInt方法来得到1-10的int随机数




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