一个简单的抽奖(概率)小程序
最近在开发中接到一个抽奖(概率)的需求,需求如下:
用户在商品购买成功后,生成一个随机红包返还给购买用户。红包比例须在后台配置,如下所示:
本人的想法是,一次初始化所有的红包,入库保存,将未使用的红包放入redis中,用户购买成功后,生成一个随机红包返还给购买用户。
代码如下:
1.红包实体:
public class Packet { private Integer num;//概率 private String obj;//批次号码 public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getObj() { return obj; } public void setObj(String obj) { this.obj = obj; } @Override public String toString() { return "Packet [num=" + num + ", obj=" + obj + "]"; } }
2.红包生成的工具类
/** * 概率中奖 * @param random 随机数 * @param list 批次集合 * @return */ public static List<String> winAPrize(List<Packet> obj){ Integer count = 0; int j = count; //奖品集合 List<String> list = new ArrayList<String>(); //循环概率集合 for(int i = 0;i < obj.size();i++){ for( j = count;j<obj.get(i).getNum()+count;j++){ list.add(obj.get(i).getObj()); } count = j; System.err.println("**********"+count); } return list; }
3.测试
public static void main(String[] args) { List<Packet> list = new ArrayList<Packet>(); Packet packet = new Packet(); packet.setNum(10); packet.setObj("srew343"); Packet packet2 = new Packet(); packet2.setNum(20); packet2.setObj("ewrewrwe"); Packet packet3 = new Packet(); packet3.setNum(50); packet3.setObj("hdhfdg"); list.add(packet); list.add(packet2); list.add(packet3); List<String> result = winAPrize(list); System.err.println("**********"+result+"************"+result.size()); Random random = new Random(); int num = random.nextInt(100); System.err.println(">>>>>>>>>>>>>>"+result.get(num)); }
结果如下:
**********10 **********30 **********80 **********[srew343, srew343, srew343, srew343, srew343, srew343, srew343, srew343, srew343, srew343, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, ewrewrwe, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg, hdhfdg]************80
