最近的公司项目中遇到一个转盘抽奖的活动:
具体每次抽中每个红包的概率要求如下:
如何实现每次抽中某个红包的概率算法呢,假如是第三次抽奖:8元的概率为25,10元的概率为70,15元的概率为5,
实现代码如下:
public static String weightRandom(Map<String, Integer> map) {
Set<String> keySet = map.keySet();
List<String> weights = new ArrayList<String>();
for (Iterator<String> it = keySet.iterator(); it.hasNext(); ) {
String weightStr = it.next();
int weight = map.get(weightStr);
for (int i = 0; i <= weight; i++) {
weights.add(weightStr);
}
}
int idx = new Random().nextInt(weights.size());
return weights.get(idx);
}
//测试方法如下
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("8元", 25);
map.put("10元", 70);
map.put("15元", 5);
for (int i = 0; i < 10; i++) {
System.out.println(weightRandom(map));
}
}