随机数计算概率执行的一种方式

2021-03-09  本文已影响0人  奔跑的佩恩

前言

Android开发过程中,我们有时会涉及到到概率执行问题。我们可以通过随机数类Random来做一个简易实现。这里我封装了一个随机数处理工具类——RandomUtil,下面来讲讲它的使用吧。

今天涉及知识:

  1. RandomUtil 简介
  2. 概率执行测试验证
  3. RandomUtil 在 Activity 中使用
  4. 效果图和项目结构图
  5. RandomUtil 源码

先来波效果图


效果图.gif

一. 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 中使用

下面给出RandomUtilActivity中使用代码:

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);
    }
}

四.效果图和项目结构图

效果图.gif 项目结构图.png

五.RandomUtil 源码

RandomUtil 源码如下:

上一篇 下一篇

猜你喜欢

热点阅读