随机数计算概率执行的一种方式
2021-03-09 本文已影响0人
奔跑的佩恩
前言
在Android
开发过程中,我们有时会涉及到到概率执行
问题。我们可以通过随机数类Random
来做一个简易实现。这里我封装了一个随机数处理工具类——RandomUtil
,下面来讲讲它的使用吧。
今天涉及知识:
- RandomUtil 简介
- 概率执行测试验证
- RandomUtil 在 Activity 中使用
- 效果图和项目结构图
- RandomUtil 源码
先来波效果图

一. RandomUtil 简介
RandomUtil
是基于Random
的一个封装工具类。主要用于处理获取某一范围内的随机数值
,判断某概率下动作是否执行
等。
RandomUtil
主要方法如下:
/***
* 随机生成 [start,end] 之间的数字
*
* @param start
* @param end
* @return
*/
public static int getRandomInt(int start,int end)
/***
* 根据概率执行
*
* @param rate 概率范围[0.0000,1.0000] 小数点后保留4位小数
* @return true:执行 false:不执行
*/
public static boolean getProbability(double rate)
二.概率执行测试验证
getProbability(double rate)
主要用于判断概率为rate
时,动作是否执行的问题。如概率设置为0.23
时,某段代码是否执行。那么这里就需要对getProbability(double rate)
执行返回的结果做大量采集统计。
以getProbability(double rate)
执行10000
次,统计其中返回true
的次数,最后测算出结果,看是否与开始设置的概率相近。
下面给出测试代码:
double rate=0.23;//要验证的概率
//采集10000次执行,统计概率准确性
double count=0;
int sum=10000;
for (int i = 0; i <sum ; i++) {
if(RandomUtil.getProbability(rate)){
count++;
}
}
double result=count/sum;
String message="设置概率:"+rate+", 采集"+sum+"次执行概率结果:"+result;
LogUtil.i("====="+message);
最后打印结果:
=====设置概率:0.23, 采集10000次执行概率结果:0.2347
相差不大,验证基本可用。
三.RandomUtil 在 Activity 中使用
下面给出RandomUtil
在 Activity
中使用代码:
public class TempActivity extends AppCompatActivity{
private TextView mTvTest;
private Button mBtnTest;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
//初始化控件
initView();
//初始化数据
initData();
//控件监听
setListener();
}
/**初始化控件**/
private void initView(){
mTvTest=findViewById(R.id.mTvTest);
mBtnTest=findViewById(R.id.mBtnTest);
}
private void initData(){
}
/**控件监听**/
private void setListener() {
mBtnTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
test();
}
});
}
private void test(){
double rate=0.23;//要验证的概率
//采集10000次执行,统计概率准确性
double count=0;
int sum=10000;
for (int i = 0; i <sum ; i++) {
if(RandomUtil.getProbability(rate)){
count++;
}
}
double result=count/sum;
String message="设置概率:"+rate+", 采集"+sum+"次执行概率结果:"+result;
LogUtil.i("====="+message);
mTvTest.setText(message);
}
}
四.效果图和项目结构图


五.RandomUtil 源码
RandomUtil
源码如下: