产生指定概率的随机数

1.

首先由下面的测试代码和运行结果,可以看出:

  1. Random类产生随机数,每个数的出现概率都是相同的;
  2. 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方法实现的。

猜你喜欢

转载自blog.csdn.net/Yangchenju/article/details/82715444
今日推荐