JAVA中怎么实现一个概率计算

JAVA中怎么实现一个概率计算,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

专注于为中小企业提供成都做网站、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业松溪免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

程序中经常遇到随机送红包之类的情景,这个随机还得指定概率,比如10%的机率可以得到红包。那么java怎么实现一个简单的概率计算了,见如下例子:

int randomInt =  RandomUtils.nextInt(1,101);if(randomInt <= 10){ //100里面1个数,小于等于10的概率就是10%       //do something}

RandomUtils工具类是commons-lang3包里面的

org.apache.commonscommons-lang33.7

 如果要在某个数字区间产生一个随机数,区间内部在不同的片段几率不同如何实现呢?经常有这样的场景,比如,随机赠送红包,范围0.1元-100元,0.1-1元的概率是90%,1元-10元的概率是9%,10元-100元的概率是1%,也就是说数额越大得到的几率越小!实现的原理如下图:

JAVA中怎么实现一个概率计算

原理就是,将范围分割成一个个子范围(片段),具体采用哪个范围,再用机率判断。片段机率可以依次排好序,映射成[1,100]之间的数字。然后随机一个[1,100]之间的数,该数落在哪个区间,就采用哪个片段产生随机数。具体源代码如下:

package com.jeeplus.common.utils;import org.apache.commons.lang3.RandomUtils;import java.util.ArrayList;import java.util.List;/** * 按几率产生随机数 * 例如,产生0.1-100的随机数,0.1-1的几率是90%,1-10的几率是9%,10-100的几率是1% */public class RateRandomNumber {/**     * 产生随机数     * @param min 最小值     * @param max 最大值     * @return 随机结果     */    public static double produceRandomNumber(double min,double max){return RandomUtils.nextDouble(min,max); //[min,max]    }/**     * 按比率产生随机数     * @param min 最小值     * @param max 最大值     * @param separates 分割值(中间插入数)     * @param percents 每段数值的占比(几率)     * @return 按比率随机结果     */    public static double produceRateRandomNumber(double min,double max,List separates,List percents){if(min > max){throw new IllegalArgumentException("min值必须小于max值");
        }if(separates == null || percents==null || separates.size()==0){return produceRandomNumber(min,max);
        }if(separates.size() +1 != percents.size()){throw new IllegalArgumentException("分割数字的个数加1必须等于百分比个数");
        }int totalPercent = 0;for(Integer p:percents){if(p<0 || p>100){throw  new IllegalArgumentException("百分比必须在[0,100]之间");
            }
            totalPercent += p;
        }if(totalPercent != 100){throw new IllegalArgumentException("百分比之和必须为100");
        }for(double s:separates){if(s <= min || s >= max){throw new IllegalArgumentException("分割数值必须在(min,max)之间");
            }
        }int rangeCount = separates.size()+1; //例如:3个插值,可以将一个数值范围分割成4段        //构造分割的n段范围        List ranges = new ArrayList();int scopeMax = 0;for(int i=0;i separates = new ArrayList();
        separates.add(1.0);
        separates.add(10.0);
        List percents = new ArrayList();
        percents.add(90);
        percents.add(9);
        percents.add(1);for(int i=0;i<100;i++) {double number = produceRateRandomNumber(0.1, 100, separates, percents);
            System.out.println(String.format("%.2f",number));
        }
    }
}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


网页题目:JAVA中怎么实现一个概率计算
本文网址:http://csdahua.cn/article/gjcecs.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流