概率计算的执行

2021-04-07  本文已影响0人  奔跑的佩恩

前言

在之前我讲过了一个概率执行的工具类,但此工具类只能用于计算某件事有多少概率会执行。由于我们有时会有这样一种需求:某个事件在一个特定集合中概率执行的可能性。很显然,之前的概率执行方法并不能直接处理这种场景,如果硬要处理的话,也要把此集合中所有概率转化成和为1,并重新计算集合中每个事件的概率才行。但是这样转化起来比较麻烦,于是我在之前的基础上,新添加了基于集合中每个概率事件执行的可能性的方法,下面就来具体看看这个工具类RandomUtil的使用吧。

今天涉及以下知识:

  1. RandomUtil 中方法简介
  2. RandomUtil 在Activity中的使用
  3. 运行效果图和项目结构图
  4. RandomUtil 源码

先来波效果图

===temp=1885  tempRate=4000.0
=====总概率为1,该执行概率为0.6,是否会执行:否
========maxRate=1.0999999999999999
===temp=1173  tempRate=7999.999999999998
===做其他的事===

一. RandomUtil 中方法简介

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)

    /****
     * 根据概率执行
     *
     * @param rate  概率范围[0.0000,maxRate] 小数点后保留4位小数
     * @param maxRate 最大概率范围
     * @return true:执行   false:不执行
     */
    public static boolean getProbability(double rate,double maxRate)

    /***
     * 给一个集合(map)设置item,并给每个item设置执行概率
     *
     * @param map 集合
     * @param key item
     * @param probability 概率
     */
    public static void putProbability(Map<String,Double>map,String key,double probability)

    /***
     * map中单个key根据概率是否执行
     *
     * @param key
     * @return true:执行   false:不执行
     */
    public static boolean getProbabilityByKey(Map<String,Double> map, String key)

二. RandomUtil 在 Activity 中的使用

下面贴出RandomUtilActivity中使用时计算单个事件单个事件在集合中执行可能性的主要代码:

               //计算单个概率,总概率为1
               boolean flag = RandomUtil.getProbability(0.6);
               if (flag) {
                   LogUtil.i("=====总概率为1,该执行概率为0.6,是否会执行:是");
               } else {
                   LogUtil.i("=====总概率为1,该执行概率为0.6,是否会执行:否");
               }

               //计算一组数据中单个item执行的概率
               Map<String,Double>map=new HashMap<>();
               //设置集合
               RandomUtil.putProbability(map,"逛街",0.6);
               RandomUtil.putProbability(map,"看电影",0.2);
               RandomUtil.putProbability(map,"吃饭",0.3);
               //是否吃饭
               boolean eatFlag=RandomUtil.getProbabilityByKey(map,"吃饭");
               if(eatFlag){
                   LogUtil.i("===去吃饭===");
               }else{
                   LogUtil.i("===做其他的事===");
               }

三.运行效果图和项目结构图

效果图:

===temp=1885  tempRate=4000.0
=====总概率为1,该执行概率为0.6,是否会执行:否
========maxRate=1.0999999999999999
===temp=1173  tempRate=7999.999999999998
===做其他的事===

项目结构图


项目结构图.png

四. RandomUtil 源码

RandomUtil源码如下:

上一篇 下一篇

猜你喜欢

热点阅读