随机数的类
在程序设计中,经常都需要产生一些随机数,比如模拟随机抽奖、抽样等。
Random类在java.util包中,是专门用于提供生成一个随机数的类,随机数的生成相关方法都在该内中。比如Random类的nextInt方法需要一int型值作为参数,并返回0到参数值但不包括参数值本身的一随机值。
模拟投掷骰子
比如模拟扔有六个面的骰子:
face = 1 + randomNumbers.nextInt( 6 );
参数6称为比例因子,代表着 nextInt方法将产生 (0–5)中的一个值,这就是所谓的缩放值范围,但六个面的骰子是数字1–6在每一面上 , 而不是 0–5,我们可以通过增加1来改变产生数的范围,这个1称为移动值,可以将产生的随机数移动到特定的范围。
案例:模拟扔六个面的骰子20次的程序的范例程序。
package test;
import java.util.Random;
public class JavaDemo {
public static void main(String[] args) {
Random ran1 = new Random();
int face;
for(int i=0; i<20; i++)
{
face = 1 + ran1.nextInt(6);
System.out.print(face+" ");
}
}
}
伪随机
Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。
相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。
Random()的两种构造方法
多个随机数对象时的范例程序。
范例程序结论
以上程序中,对象random1和random2均是通过指定种子数为100构造的,而这两个对象在相同次数类生成的随机数是完全一样的。
所以为了避免出现这种情况,无论程序中需要多少个随机数,都只使用一个Random对象。
均匀分布的随机数
Random类中的方法比较简单,每个方法的功能也很容易理解,Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率是均等的。
例如:
public boolean nextBoolean()
该方法的作用是生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率。
public double nextDouble()
该方法的作用是生成一个随机的double值,数值介于[0,1.0)之间。