亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用java實現(xiàn)中獎概率詳情

 更新時間:2022年07月20日 15:33:49   作者:碼農(nóng)小宋???????  
這篇文章主要介紹了利用java實現(xiàn)中獎概率詳情,根據(jù)概率將獎品劃分區(qū)間,每個區(qū)間代表一個獎品,然后抽取???隨機(jī)數(shù)??,反查落在那個區(qū)間上,即為所抽取的獎品,需要的朋友可以參考一下

1. 算法分析

根據(jù)概率將獎品劃分區(qū)間,每個區(qū)間代表一個獎品,然后抽取 隨機(jī)數(shù),反查落在那個區(qū)間上,即為所抽取的獎品。

2. 代碼核心算法

import com.alibaba.fastjson.JSONObject;
import java.math.BigDecimal;
import java.util.*;
//抽獎核心算法
public class Arithmetic {
// 放大倍數(shù)
private static final int mulriple = 1000000;
public static int pay(List<Prize> prizes) {
int lastScope = 0;
// 洗牌,打亂獎品次序
Collections.shuffle(prizes);
Map prizeScopes = new HashMap();
Map prizeQuantity = new HashMap();
for (Prize prize : prizes) {
int prizeId = prize.getPrizeId();
// 劃分區(qū)間
int currentScope = lastScope + prize.getProbability().multiply(new BigDecimal(mulriple)).intValue();
prizeScopes.put(prizeId, new int[]{lastScope + 1, currentScope});
prizeQuantity.put(prizeId, prize.getQuantity());
lastScope = currentScope;
}
// 獲取1-1000000之間的一個隨機(jī)數(shù)
int luckyNumber = new Random().nextInt(mulriple);
int luckyPrizeId = 0;
// 查找隨機(jī)數(shù)所在的區(qū)間
if ((null != prizeScopes) && !prizeScopes.isEmpty()) {
Set set = prizeScopes.entrySet();
for (Object o : set) {
Map.Entry m = (Map.Entry) o;
int key = (int) m.getKey();
Object value = m.getValue();
Integer[] val = JSONObject.parseObject(JSONObject.toJSONString(value), Integer[].class);
if (luckyNumber >= val[0] && luckyNumber <=val[1] && Integer.parseInt(prizeQuantity.get(key)+"") > 0) {
luckyPrizeId = key;
break;
}
}
}
// if (luckyPrizeId > 0) {
// // 獎品庫存減一
// }
return luckyPrizeId;
}
public static void main(String[] args) {
List<Prize> prizes = new ArrayList();
Prize prize1 = new Prize();
prize1.setPrizeId(10000);
prize1.setProbability(new BigDecimal(0.01));
prize1.setQuantity(1);
prizes.add(prize1);

Prize prize2 = new Prize();
prize2.setPrizeId(10001);
prize2.setProbability(new BigDecimal(0.19));
prize2.setQuantity(10);
prizes.add(prize2);

Prize prize3 = new Prize();
prize3.setPrizeId(10);
prize3.setProbability(new BigDecimal(0.8));
prize3.setQuantity(1);
prizes.add(prize3);

int times = 1000;
int prize1GetTimes = 0;
int prize2GetTimes = 0;
int prize3GetTimes = 0;

for (int i = 0; i < times; i++) {
int pay = pay(prizes);
System.out.println("抽獎到了"+pay);
switch (pay) {
case 10000:
prize1GetTimes++;
break;
case 10001:
prize2GetTimes++;
break;
case 10:
prize3GetTimes++;
break;
}
}
System.out.println("抽獎次數(shù)" + times);
System.out.println("prize1中獎次數(shù)" + prize1GetTimes);
System.out.println("prize2中獎次數(shù)" + prize2GetTimes);
System.out.println("prize3中獎次數(shù)" + prize3GetTimes);
}
}

3. 抽獎對象

import lombok.Data;

import java.math.BigDecimal;
@Data
public class Prize {
//獎品唯一標(biāo)示
private Integer prizeId;
//中獎概率
private BigDecimal probability;
//獎品數(shù)量
private Integer quantity;

}

執(zhí)行結(jié)果如下:

通過1000次抽取,我們看出算法精度還是很高的。

到此這篇關(guān)于利用java實現(xiàn)中獎概率詳情的文章就介紹到這了,更多相關(guān)java中獎概率內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot+netty實現(xiàn)Web聊天室

    Springboot+netty實現(xiàn)Web聊天室

    這篇文章主要介紹了利用springboot+netty實現(xiàn)一個簡單Web聊天室,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)Java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-12-12
  • Java觀察者模式的深入了解

    Java觀察者模式的深入了解

    這篇文章主要為大家介紹了Java觀察者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java?設(shè)計模式中的策略模式詳情

    Java?設(shè)計模式中的策略模式詳情

    這篇文章主要介紹了Java?設(shè)計模式中的策略模式詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Spring @Profile注解詳解

    Spring @Profile注解詳解

    這篇文章主要介紹了Spring @Profile注解詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • SpringBoot實現(xiàn)多個ApplicationRunner時部分接口未執(zhí)行問題

    SpringBoot實現(xiàn)多個ApplicationRunner時部分接口未執(zhí)行問題

    這篇文章主要介紹了SpringBoot實現(xiàn)多個ApplicationRunner時部分接口未執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot Actuator監(jiān)控的項目實踐

    SpringBoot Actuator監(jiān)控的項目實踐

    本文主要結(jié)合 Spring Boot Actuator,跟大家一起分享微服務(wù)Spring Boot Actuator 的常見用法,方便我們在日常中對我們的微服務(wù)進(jìn)行監(jiān)控治理,感興趣的可以了解一下
    2024-01-01
  • 通過Java來測試JSON和Protocol Buffer的傳輸文件大小

    通過Java來測試JSON和Protocol Buffer的傳輸文件大小

    這篇文章主要介紹了通過Java來測試JSON和Protocol Buffer的傳輸文件大小,Protocol Buffer(文中簡稱Protobuffer)是谷歌開發(fā)的新的文件傳輸格式,需要的朋友可以參考下
    2015-12-12
  • Spring解決依賴版本不一致報錯問題

    Spring解決依賴版本不一致報錯問題

    許多同學(xué)經(jīng)常會遇到依賴版本不一致導(dǎo)致代碼報錯,所以這篇文章就給大家詳細(xì)介紹一下Spring解決依賴版本不一致報錯問題,需要的朋友跟著小編一起來看看吧
    2023-07-07
  • springCloud集成nacos啟動時報錯原因排查

    springCloud集成nacos啟動時報錯原因排查

    這篇文章主要介紹了springCloud集成nacos啟動時報錯原因排查,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 一文徹底搞定Java中常用集合的排序方法

    一文徹底搞定Java中常用集合的排序方法

    在某些特殊的場景下我們需要在Java程序中對List集合進(jìn)行排序操作,下面這篇文章主要給大家介紹了關(guān)于Java中常用集合的排序方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11

最新評論