多條告白如次劇本只需引入一次
獎品類:
抽獎論理:
嘗試類:
嘗試截止:
商品類:
packageorg.plusgroup.modules.app.controller.vo;importio.swagger.annotations.ApiModelProperty;importlombok.Data;importjava.util.ArrayList;importjava.util.List;/***@authorAdministrator*@desc獎品VO*@date2021/7/914:30*/@DatapublicclassPrizeVo{@ApiModelProperty("獎品ID")privateIntegerid;@ApiModelProperty("獎品稱呼")privateStringname;@ApiModelProperty("獎品編號")privateStringcode;@ApiModelProperty("中獎幾率")privateDoublerate;publicPrizeVo(Integerid,Stringname,Stringcode,Doublerate){this.id=id;this.name=name;this.code=code;this.rate=rate;}publicPrizeVo(){}/***初始化獎品*@returnList*/publicstaticList<PrizeVo>init(){List<PrizeVo>list=newArrayList<>();list.add(newPrizeVo(10,"文書檔案打字與印刷券","P1",0.2d));list.add(newPrizeVo(20,"像片打字與印刷券","P2",0.5d));list.add(newPrizeVo(30,"5元代金券","P3",0.1d));list.add(newPrizeVo(40,"感謝介入","P4",0.2d));returnlist;}}嘗試類:
packageorg.plusgroup.modules.admin.service;importorg.plusgroup.modules.app.controller.vo.PrizeVo;importorg.springframework.util.CollectionUtils;importjava.util.*;/***@authorAdministrator*@desc*@date2021/7/914:43*/publicclassIntegralLogTest{publicstaticvoidmain(String[]args){//獎品中獎幾率匯合List<Double>rates=newArrayList<>();//將每個獎品的幾率放入幾率匯合List<PrizeVo>list=PrizeVo.init();for(PrizeVoprizeVo:list){rates.add(prizeVo.getRate());}System.out.println("此次中獎商品下標:"+luckDraw(rates));//統計每種商品中獎度數Map<Integer,Integer>countMap=newHashMap<>();doublenum=10000;//嘗試度數for(inti=0;i<num;i++){intkey=luckDraw(rates);Integervalue=countMap.get(key);countMap.put(key,value==null?1:value+1);}for(Map.Entry<Integer,Integer>entry:countMap.entrySet()){System.out.println(list.get(entry.getKey())+",擲中度數="+entry.getValue()+",本質幾率="+entry.getValue()/num);}}/***抽獎論理*@paramrates幾率匯合*@returnint*/publicstaticintluckDraw(List<Double>rates){if(CollectionUtils.isEmpty(rates)){return-1;}//計劃總幾率,幾率匯合累加doubletotalRate=0d;for(doublerate:rates){totalRate+=rate;}//每個獎品在總幾率普通下的幾率List<Double>sortRates=newArrayList<>();doubleeveryRate=0d;for(doublerate:rates){everyRate+=rate;sortRates.add(everyRate/totalRate);}//按照區(qū)塊值來獲得抽取到的貨色索引doublenextDouble=Math.random();sortRates.add(nextDouble);Collections.sort(sortRates);returnsortRates.indexOf(nextDouble);}}