1.
首先由下面的测试代码和运行结果,可以看出:
- Random类产生随机数,每个数的出现概率都是相同的;
- Random类产生随机数是有相同规律在产生,并不是正真的随机(伪随机),例如
Random r1 = new Random();
是默认当前系统时间的毫秒数作为种子数;Random r1 = new Random(10);
是指定种子为10的Random对象,相当于选择了一种规则,但一种规则里面的产生随机数的方法/规律一固定的。
import java.io.*;
import java.util.Random;//引入Random类
class randomNumber{
public static void main(String[] args) throws java.lang.Exception{
Random r1 = new Random(10);//指定种子为10的Random对象
Random r2 = new Random(10);//指定种子为10的Random对象
for(int i = 0;i < 3;i++){
System.out.println(r1.nextInt());//Random类中的nextInt()方法,产生[0,10)的整数
System.out.println(r2.nextInt());
System.out.println(r1.nextDouble());//Random类中的nextDouble()方法,产生[0,10)的浮点数
System.out.println(r2.nextDouble());
}
}
}
运行结果:
2. 产生指定概率的随机数
根据上面的原理,可有下面的代码产生指定概率的随机数
//随机产生[0;1;2],0出现的概率为20%,1出现的概率为60%,2出现的概率为20%
int a = r.nextInt(100);//随机产生[0,100)的整数,每个数字出现的概率为1%
int b; //需要的结果数字
if(a< 20){ //前20个数字的区间,代表20%的几率
b = 0;
}else if(a< 80){//[20,80),60个数字的区间,代表60%的几率
b = 1;
}else{//[80,100),20个数字区间,代表20%的几率
b =2;
}
3. Math类中的random方法与Random类的比较
Math类中的random方法是生成一个[0,1.0)区间的随机小数。
Math类中的random方法就是直接调用Random类中的nextDouble方法实现的。