java中的随机数Random

java中一般有两种随机数,一个是Math中random()方法,一个是Random类。

一、Math.random()  :     随即生成0<x<1的小数

  实例:如何写,生成随机生成出0~100中的其中一个数呢?

      Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50      即为50~100.
     最终代码:(int)(Math.random()*50) + 50

二、Random类

    Random random = new Random();//默认构造方法

    Random random = new Random(1000);//指定种子数字

在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同,举例:

Random random1 = new Random(100);  
System.out.println(random1.nextInt());  
System.out.println(random1.nextFloat());  
System.out.println(random1.nextBoolean());  

Random random2 = new Random(100);  
System.out.println(random2.nextInt());  
System.out.println(random2.nextFloat());  
System.out.println(random2.nextBoolean()); 

// 两次输出的结果是一样的。

事实上,Random是一种伪随机数,相同的种子产生相同的序列

Random类的常用方法:

(1) public boolean nextBoolean() 

  该方法的作用是生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率

(2) public double nextDouble()

  该方法的作用是生成一个随机的double值,数值介于[0,1.0)之间,这里中括号代表包含区间端点,小括号代表不包含区间端点,也就是0到1之间的随机小数,包含0而不包含1.0

(3) public int nextInt()

  该方法的作用是生成一个随机的int值,该值介于int的区间,也就是-2的31次方到2的31次方-1之间

(4) public int nextInt(int n)

  该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n

(5) public void setSeed(long seed)

  该方法的作用是重新设置Random对象中的种子数。设置完种子数以后的Random对象和相同种子数使用new关键字创建出的Random对象相同。每次的Seed不同,random就不同了。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。要了解Seed的作用,得先了解随机数原理。

Random类的使用实例: 使用Random类,一般是生成指定区间的随机数字,下面就一一介绍如何生成对应区间的随机数字

  Random r = new Random();

  1) 生成[0,1.0)区间的小数:    double d1 = r.nextDouble();

  2) 生成[0,5.0)区间的小数:     double d2 = r.nextDouble() * 5;

  3) 生成[1,2.5)区间的小数 [n1,n2]:   double d3 = r.nextDouble() * 1.5 + 1;【也就是 r.nextDouble() * (n2-n1)+n1】

生成[1,2.5)区间的随机小数,则只需要首先生成[0,1.5)区间的随机数字,然后将生成的随机数区间加1即可。

同理,生成任意非从0开始的小数区间[d1,d2)范围的随机数字(其中d1不等于0),则只需要首先生成[0,d2-d1)区间的随机数字,然后将生成的随机数字区间加上d1即可。

  4) 生成[0,10)区间的整数:  int n2 = r.nextInt(10);  

   也可以使用这个方法 int  n3 = Math.abs(r.nextInt() % 10);  这种方法首先调用nextInt()方法生成一个任意的int数字,该数字和10取余以后生成的数字区间为(-10,10),因为按照数学上的规定余数的绝对值小于除数,然后再对该区间求绝对值,则得到的区间就是[0,10)了。

  

原文地址:https://www.cnblogs.com/myseries/p/5204502.html