java抽奖代码
来源:互联网 发布:焊接软件那个好 编辑:程序博客网 时间:2024/05/20 06:52
<pre name="code" class="plain">一共三个类,如下分别是:
奖品实体类如下:
import java.math.BigDecimal;public class Prize { /** * 奖品唯一标示 */ private Integer prizeId; /** * 中奖概率 */ private BigDecimal probability; /** * 奖品数量 */ private Integer quantity; public Integer getPrizeId() { return prizeId; } public void setPrizeId(Integer prizeId) { this.prizeId = prizeId; } public BigDecimal getProbability() { return probability; } public void setProbability(BigDecimal probability) { this.probability = probability; } public Integer getQuantity() { return quantity; } public void setQuantity(Integer quantity) { this.quantity = quantity; }}
抽奖关键方法
import java.math.BigDecimal;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Random;import java.util.Set;public class Arithmetic { // 放大倍数 private static final int mulriple = 1000; public int pay(List<Prize> prizes) { int lastScope = 0; // 洗牌,打乱奖品次序 Collections.shuffle(prizes); Map<Integer, int[]> prizeScopes = new HashMap<Integer, int[]>(); Map<Integer, Integer> prizeQuantity = new HashMap<Integer, Integer>(); for (Prize prize : prizes) { int prizeId = prize.getPrizeId(); // 划分区间 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之间的一个随机数 int luckyNumber = new Random().nextInt(mulriple); int luckyPrizeId = 0; // 查找随机数所在的区间 if ((null != prizeScopes) && !prizeScopes.isEmpty()) { Set<Entry<Integer, int[]>> entrySets = prizeScopes.entrySet(); for (Map.Entry<Integer, int[]> m : entrySets) { int key = m.getKey(); if (luckyNumber >= m.getValue()[0] && luckyNumber <= m.getValue()[1] && prizeQuantity.get(key) > 0) { luckyPrizeId = key; break; } } } if (luckyPrizeId > 0) { // 奖品库存减一 } return luckyPrizeId; }}
测试抽奖的main方法
import java.io.IOException;import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;import com.meidaojia.common.util.OrmUtil;public class Test { public static void main(String[] args) throws IOException { List<Prize> prizes = new ArrayList<Prize>(); Prize prize1 = new Prize(); prize1.setPrizeId(1); prize1.setProbability(new BigDecimal(0.00)); prize1.setQuantity(1); prizes.add(prize1); Prize prize2 = new Prize(); prize2.setPrizeId(2); prize2.setProbability(new BigDecimal(0.10)); prize2.setQuantity(10); prizes.add(prize2); Prize prize3 = new Prize(); prize3.setPrizeId(3); prize3.setProbability(new BigDecimal(0.50)); prize3.setQuantity(20); prizes.add(prize3); Prize prize4 = new Prize(); prize4.setPrizeId(4); prize4.setProbability(new BigDecimal(0.20)); prize4.setQuantity(3); prizes.add(prize4); Prize prize5 = new Prize(); prize5.setPrizeId(5); prize5.setProbability(new BigDecimal(0.00)); prize5.setQuantity(200); prizes.add(prize5); int prize1GetTimes = 0; int prize2GetTimes = 0; int prize3GetTimes = 0; int prize4GetTimes = 0; int prize5GetTimes = 0; Arithmetic arithmetic = new Arithmetic(); int times = 10000; for (int i = 0; i < times; i++) { int prizeId = arithmetic.pay(prizes); switch (prizeId) { case 1: prize1GetTimes++; break; case 2: prize2GetTimes++; break; case 3: prize3GetTimes++; break; case 4: prize4GetTimes++; break; case 5: prize5GetTimes++; break; } } System.out.println("抽奖次数" + times); System.out.println("prize1中奖次数" + prize1GetTimes); System.out.println("prize2中奖次数" + prize2GetTimes); System.out.println("prize3中奖次数" + prize3GetTimes); System.out.println("prize4中奖次数" + prize4GetTimes); System.out.println("prize5中奖次数" + prize5GetTimes); }}
0 0
- java抽奖代码
- java代码实现抽奖功能
- 随机抽奖代码片段--Java
- 转盘抽奖Java后端代码
- java 商场的幸运抽奖 关键代码
- 抽奖代码
- 抽奖代码
- java 抽奖
- Java数字抽奖游戏核心代码及分析
- Android抽奖转盘代码
- 轮盘抽奖代码
- 轮盘抽奖代码
- golang随机抽奖代码
- 抽奖C代码
- java--幸运抽奖
- [JAVA]手机号码抽奖程序
- java swing抽奖程序
- Java 每日抽奖
- 从零开始box2d(2) 物体的运动
- Python环境
- 蓝鸥Unity开发基础——接口
- LeetCode 231 Power of Two (位运算)
- c++ syntax error C2061: identifier 'vector'
- java抽奖代码
- AngularJS-1.启动流程
- Android Studio: package / applicationId
- http--八种请求方式
- IT-linux--ss
- superSocket和android的通讯
- plsql 查询结果出现中文乱码
- leetcode-Contains Duplicate III-220
- iOS开发中,textview中文输入有联想的时候,字数限制问题