日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java實現抽獎概率類

瀏覽:22日期:2022-08-20 13:57:59

本文實例為大家分享了java實現抽獎概率類的具體代碼,供大家參考,具體內容如下

在一些項目需求中,可能會遇到抽獎問題,如提供一系列獎品及獲獎概率,要求根據概率返回每次抽到的獎品。以下是本人在實際項目中寫的一個抽獎工具類,與大家共同分享:

import java.util.ArrayList;import java.util.List;import java.util.Random; /** * 抽獎工具類,概率和可以不等于1 * 概率為百分數去掉百分號的部分,如10%,則為10 * 抽獎操作如下: * 1.輸入抽獎概率集合,【抽獎概率集合為{10.0, 20.0, 30.0}】 * 2.生成連續集合, 【生成的連續集合為{(0.0, 10.0],(10.0, 30.0],(30.0, 60.0]}】 * 3.生成隨機數, 【生成方法為 random.nextDouble() * maxElement】 * 4.判斷隨機數在哪個區間內,返回該區間的index【生成了隨機數12.001,則它屬于(10.0, 30.0],返回 index = 1】 * */public class LotteryUtil { /** * 定義一個連續集合 * 集合中元素x滿足:(minElement,maxElement] * 數學表達式為:minElement < x <= maxElement * */ public class ContinuousList { private double minElement; private double maxElement; public ContinuousList(double minElement, double maxElement){ if(minElement > maxElement){ throw new IllegalArgumentException('區間不合理,minElement不能大于maxElement!'); } this.minElement = minElement; this.maxElement = maxElement; } /** * 判斷當前集合是否包含特定元素 * @param element * @return */ public boolean isContainKey(double element){ boolean flag = false; if(element > minElement && element <= maxElement){ flag = true; } return flag; } } private List<ContinuousList> lotteryList; //概率連續集合 private double maxElement; //這里只需要最大值,最小值默認為0.0 /** * 構造抽獎集合 * @param list 為獎品的概率 */ public LotteryUtil(List<Double> list){ lotteryList = new ArrayList<ContinuousList>(); if(list.size() == 0){ throw new IllegalArgumentException('抽獎集合不能為空!'); } double minElement = 0d; ContinuousList continuousList = null; for(Double d : list){ minElement = maxElement; maxElement = maxElement + d; continuousList = new ContinuousList(minElement, maxElement); lotteryList.add(continuousList); } } /** * 進行抽獎操作 * 返回:獎品的概率list集合中的下標 */ public int randomColunmIndex(){ int index = -1; Random r = new Random(); double d = r.nextDouble() * maxElement; //生成0-1間的隨機數 if(d == 0d){ d = r.nextDouble() * maxElement; //防止生成0.0 } int size = lotteryList.size(); for(int i = 0; i < size; i++){ ContinuousList cl = lotteryList.get(i); if(cl.isContainKey(d)){ index = i; break; } } if(index == -1){ throw new IllegalArgumentException('概率集合設置不合理!'); } return index; } public double getMaxElement() { return maxElement; } public List<ContinuousList> getLotteryList() { return lotteryList; } public void setLotteryList(List<ContinuousList> lotteryList) { this.lotteryList = lotteryList; } }

該工具類的基本思想是,將抽獎概率分布到數軸上,如現有三個抽獎概率10、20、30,將三者依次添加到概率集合中,則構造的數軸為:0~10范圍內表示概率10,10~30范圍內表示概率為20,30~60范圍內表示概率為30,數軸上的長度對應著相應的概率。由這種處理方式可知,概率總和并不需要等于1。該工具類的成功與否在于Random.nextDouble()能否等概率地生成0~1之間的任意一個數。

對該抽獎工具進行測試,測試類如下:

package com.lottery; import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry; class Result{ private int index; private int sumTime; private int time; private double probability; private double realProbability; public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } public int getSumTime() { return sumTime; } public void setSumTime(int sumTime) { this.sumTime = sumTime; } public double getProbability() { return probability; } public double getRealProbability() { return realProbability; } public void setRealProbability(double realProbability) { this.realProbability = realProbability; } public Result(){ } public Result(int index, int sumTime, int time, double realProbability) { this.setIndex(index); this.setTime(time); this.setSumTime(sumTime); this.setRealProbability(realProbability); } public String toString(){ return '索引值:' + index + ',抽獎總數:' + sumTime + ',抽中次數:' + time + ',概率:' + realProbability + ',實際概率:' + (double)time/sumTime; }} public class TestLottery { static final int TIME = 100000; public static void iteratorMap(Map<Integer, Integer> map, List<Double> list){ for(Entry<Integer, Integer> entry : map.entrySet()){ int index = entry.getKey(); int time = entry.getValue(); Result result = new Result(index, TIME, time, list.get(index)); System.out.println(result); } } public static void main(String[] args) { //構造概率集合 List<Double> list = new ArrayList<Double>(); list.add(20d); list.add(80d); list.add(50d); list.add(30d); LotteryUtil ll = new LotteryUtil(list); double sumProbability = ll.getMaxElement(); Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for(int i = 0; i < TIME; i++){ int index = ll.randomColunmIndex(); if(map.containsKey(index)){ map.put(index, map.get(index) + 1); }else{ map.put(index, 1); } } for(int i = 0; i < list.size(); i++){ double probability = list.get(i) / sumProbability; list.set(i, probability); } iteratorMap(map, list); }}

運行結果:

java實現抽獎概率類

由結果可知,抽獎100000時, 得到的實際概率基本與正式概率相當。

以下說明此類調用方式:

public LotteryUtil(List<Double> list)說明:構造方法,傳入參數為一個概率集合

public int randomColunmIndex()功能:進行抽獎操作,返回List集合的索引下標,此下標對應的概率的獎品即為抽中的獎品

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本蜜桃在线观看视频| 欧美一级网址| 久久aⅴ国产紧身牛仔裤| 久久国产婷婷国产香蕉| 日韩成人亚洲| 欧美一区成人| 香蕉精品视频在线观看| 国产精品久久久久久久久久齐齐| 999精品一区| 欧美日韩中文| 免费精品国产的网站免费观看| 91精品日本| 99久久婷婷| 国产亚洲一区二区三区啪| 欧洲精品一区二区三区| 日韩av不卡一区二区| 高清一区二区三区| 亚洲影院天堂中文av色| 日韩在线观看不卡| 国产探花一区| 悠悠资源网久久精品| 精品美女视频| 日本电影久久久| 亚洲精品一区二区妖精| 精品中文字幕一区二区三区 | av亚洲免费| 老司机精品在线| 日本特黄久久久高潮| 每日更新成人在线视频| 天堂日韩电影| 欧美激情视频一区二区三区免费 | 亚洲成人精品| 97精品国产福利一区二区三区| 日韩成人精品一区二区三区| 国产精品美女| 蜜臀久久精品| 国产精品久久久久久久免费观看| 日韩avvvv在线播放| 蜜臀久久99精品久久久画质超高清 | 91精品国产成人观看| 精品国产黄a∨片高清在线| 日韩高清欧美激情| 蜜臀久久99精品久久久久久9| 免费不卡中文字幕在线| 久久精品国语| 欧产日产国产精品视频| 成人在线视频免费| 精品中国亚洲| 国产精品极品在线观看| 日韩一二三区在线观看| 久久国产99| 国产亚洲一级| 中文日韩在线| 日韩午夜免费| 中文亚洲免费| 亚洲激情婷婷| 午夜视频精品| 欧美理论视频| 欧美特黄一区| 夜夜嗨一区二区三区| 欧美日韩国产免费观看视频| 欧美日韩一区二区综合| 91看片一区| 99精品在线观看| 成人免费网站www网站高清| zzzwww在线看片免费| 国产suv精品一区二区四区视频| 国产精品视频一区二区三区综合| 国产乱子精品一区二区在线观看| 91精品在线免费视频| 国产乱码精品一区二区三区四区 | 中文字幕在线看片| 色爱综合av| 香蕉国产精品| 免费在线观看一区二区三区| 亚洲人成网77777色在线播放| 婷婷综合福利| 国产一级成人av| 欧美精品不卡| 国产a亚洲精品| 欧洲一级精品| 国模 一区 二区 三区| 午夜欧美视频| 日韩专区欧美专区| 日韩高清国产一区在线| 国产欧美日韩| 国产aⅴ精品一区二区四区| 水蜜桃精品av一区二区| 久久婷婷久久| 夜夜嗨网站十八久久| 天堂精品久久久久| 国产精品久久久久久妇女| 98精品视频| 国产综合视频| 只有精品亚洲| 国产精品久久久久久久久久齐齐| 日本黄色精品| av亚洲在线观看| 日韩欧美另类中文字幕| 国产精品网址| 成人羞羞在线观看网站| 亚洲主播在线| 国产三级精品三级在线观看国产| 精品视频97| 一区二区三区四区在线看| 久久性天堂网| 国产精品国码视频| 日韩欧美在线中字| 红桃视频亚洲| 欧美一区自拍| 国产盗摄——sm在线视频| 狠狠操综合网| 日韩av一区二区三区四区| 精品国产一区二| 国精品一区二区三区| 91精品福利观看| 日韩一区亚洲二区| 一区二区三区午夜视频| 久久久国产精品网站| 日韩精品诱惑一区?区三区| 免费在线观看日韩欧美| 精品国产亚洲一区二区在线观看| 午夜影院欧美| 国产调教精品| 亚洲夜间福利| 国产欧美日韩一区二区三区四区| 99久久精品国产亚洲精品| 日本成人在线视频网站| 国产精品亚洲一区二区三区在线观看| 美女网站久久| 国产96在线亚洲| 中文字幕乱码亚洲无线精品一区| 九九久久国产| 玖玖玖国产精品| 精品国产欧美日韩| 男女男精品视频网| 日韩一区二区中文| 欧美久久精品| 影音先锋久久| 国产成人黄色| 三级久久三级久久久| 亚洲性色av| 久久国产婷婷国产香蕉| 99在线|亚洲一区二区| 免费在线亚洲欧美| 性欧美长视频| 亚洲风情在线资源| 日韩av电影一区| 日韩一级精品| 在线观看精品| 国产精品午夜一区二区三区| 日韩视频久久| 国产精品成久久久久| 日本va欧美va瓶| 91精品蜜臀一区二区三区在线| 国产精品调教视频| 蜜芽一区二区三区| 亚洲网站视频| 91亚洲国产| 国产乱码精品一区二区三区四区| 午夜久久美女| 日韩久久精品| 精品丝袜久久| 久久激情综合网| 免费国产亚洲视频| 在线视频观看日韩| 成人国产精品久久| 欧美一区自拍| 免费久久精品视频| 亚洲天堂1区| 美女av一区| 91欧美极品| 亚洲精品中文字幕99999| 啪啪国产精品| 国精品产品一区| 日韩av黄色在线| 伊人久久大香伊蕉在人线观看热v| 国产真实久久| 都市激情国产精品| 精品一区二区三区四区五区| 日韩黄色在线观看| 亚洲制服一区| 中文久久精品| 欧美日韩国产精品一区二区亚洲| 色婷婷色综合| 九九99久久精品在免费线bt| 国产精品亚洲综合色区韩国| 亚洲人成网站在线在线观看| 国产亚洲高清视频| 亚洲精品中文字幕乱码| 久久久久一区| 日韩三区免费| 91精品一区国产高清在线gif| 丝袜诱惑一区二区| 亚洲三级欧美| 亚洲午夜天堂| 国产欧美一区二区三区精品酒店| 首页国产精品| 欧美天堂视频| 中文在线中文资源|