java基于权重的抽奖算法
最近需要写一个抽奖的功能(附带权重),根据这位博主https://blog.51cto.com/u_16213431/7116970,的算法理解了一下,记录下来
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class HelloWorld {
public static void main(String []args) {
List<String> participants = new ArrayList<>();//建立一个参与者数组(也可以是参与抽奖的物品数组)
participants.add("Alice");
participants.add("Bob");
participants.add("Charlie");
participants.add("David");
List<Integer> weights = new ArrayList<>();//建立一个权重数组
weights.add(1);
weights.add(2);
weights.add(3);
weights.add(4);
int totalWeight = weights.stream().mapToInt(Integer::intValue).sum();//计算权重总量,就是把权重数组中的权重加起来
Random random = new Random();
int randomNumber = random.nextInt(totalWeight);//产生 (0 ~ 总权重)中的随机数
int cumulativeWeight = 0;
int index = 0;
for (int weight : weights) {//循环权重数组,并计算累积权重
cumulativeWeight += weight;//计算累积权重
if (randomNumber < cumulativeWeight) { //如果上面生成的随机数落在在个权重区间内,则跳出循环,使用当前的这个 参与者数组 下标,否则就进入下一个权重区间进行判断
break;
}
index++;
}
String winner = participants.get(index);
System.out.println("The winner is: " + winner);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律