一、新内容(Util包)Random


 一、Java随机数产生方式
 1、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。

long ctms = System.currentTimeMillis(); 
 
   System.out.println(ctms); 
 

    Date date = new Date(); 
 
   System.out.println(date.getTime());【当前时间和1970年格林威治时间之间的间隔数】


 2、通过Math.random()返回一个0.0-1.0之间的double值【Math在java.lang包,打开JDK API查看】

double r1 =Math.random(); 
 
    System.out.println(r1);


 3、通过Random类来产生一个随机数,这个是专业的的Random工具类,功能强大。


 二、Random类
 Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。
 相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。这点在生成多个随机数字时需要特别注意。


 1、Random对象的生成
          Random类包含两个构造方法,下面依次进行介绍:
 a、public Random()
 该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象。
 b、public Random(long seed)
 该构造方法可以通过制定一个种子数进行创建。
 示例代码:

Random r = new Random(); 
 
  Random r1 = new Random(10);


 再次强调:种子数只是随机算法的起源数字,和生成的随机数字的区间无关。


 Random类中的方法比较简单,每个方法的功能也很容易理解。需要说明的是,Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率是均等的。下面对这些方法做一下基本的介绍:
 a、public boolean nextBoolean()
 该方法的作用是生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率。
 b、public double nextDouble()
 该方法的作用是生成一个随机的double值,数值介于[0,1.0)之间。
 c、public int nextInt()
 该方法的作用是生成一个随机的int值,该值介于int的区间,也就是-231到231-1之间。
 如果需要生成指定区间的int值,则需要进行一定的数学变换,具体可以参看下面的使用示例中的代码。
 d、public int nextInt(int n)
 该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。
 如果想生成指定区间的int值,也需要进行一定的数学变换,具体可以参看下面的使用示例中的代码。
 e、public void setSeed(long seed)
 该方法的作用是重新设置Random对象中的种子数。设置完种子数以后的Random对象和相同种子数使用new关键字创建出的Random对象相同。


Random r2= new Random(); 
 
  int result1 = r2.nextInt(100); 
 
   System.out.println(result1);


 三、总结
 1、随机数很常用,在Java有三种产生方式,以Random随机数的使用最为复杂。
   2、Random类对象有是否带种子之分,带种子的只要种子相同,多次运行,生成随机数的结果总是那样。
   3、带种子随机数的带种子的对象创建方式有两种,效果一样。但是带种子的随机数用处似乎不大。
   4、Random的功能涵盖了Math.random()的功能。
   5、可以通过随机数去做实现随机字符串等复杂的随机数据。
   6、不要研究不重复的随机数,意义不大。
 7、random方法的调用比较简单,所以很多程序员都习惯使用Math类的random方法来生成随机数字。