奖品类:
public class Prize {
private int id;//奖品id
private String prize_name;//奖品名称
private int prize_amount;//奖品(剩余)数量
private int prize_weight;//奖品权重
}
prize_name表示奖品名称;
prize_amount表示奖品数量,即本次抽奖活动计划发放此奖品的数量;
prize_weight表示奖品权重,表示奖品被抽到的几率的比重,权重越大,被抽到的几率越大,
比如本次砸金蛋活动有4种奖品,权重分别是1、2、3、4,总权重是10,那么每种奖品被抽到的几率就是1/10,2/10,3/10,4/10。
抽奖算法:
/**
* 根据Math.random()产生一个double型的随机数,判断每个奖品出现的概率
* @param prizes
* @return random:奖品列表prizes中的序列(prizes中的第random个就是抽中的奖品)
*/
public int getPrizeIndex(List<Prize> prizes) {
DecimalFormat df = new DecimalFormat("######0.00");
int random = -1;
try{
//计算总权重
double sumWeight = 0;
for(Prize p : prizes){
sumWeight += p.getPrize_weight();
}
//产生随机数

本文介绍了如何设计一个抽奖活动的中奖逻辑。奖品包括不同名称和数量,每个奖品带有权重,权重决定了抽奖概率。例如,一个砸金蛋活动有4种奖品,权重分别为1、2、3、4,总权重为10,因此各奖品的中奖概率分别为1/10、2/10、3/10、4/10。文章还涵盖了抽奖算法的实现。

978

被折叠的 条评论
为什么被折叠?



