Java实现随机抽奖的三种方法
日期是二零二四年九月二十九日, 时间为零八时二八分五十秒, 作者是Tech。
在Java里头实现随机抽奖的办法, 一般来讲我们会运用java.util.类去生成随机数, 接着依据这些随机数来挑选中奖者, 下面将会给出几种常见的随机抽奖实现方式, 有需要的朋友能够参考一下哦。
引言
在Java里头实现随机抽奖的办法, 一般来讲我们会借助java.util类去生成随机数, 紧接着依据这些随机数来挑选中奖者, 以下会给出几种常见的随机抽奖实现手段,覆盖从数组里面抽取, 从列表里面抽取以及基于权重的抽奖方式。
1. 从数组中抽取
import java.util.Random; public class LotteryFromArray { public static void main(String[] args) { String[] candidates = {"Alice", "Bob", "Charlie", "David", "Eva"}; Random random = new Random(); // 生成一个0到candidates.length-1之间的随机数 int index = random.nextInt(candidates.length); // 输出中奖者 System.out.println("中奖者是:" + candidates[index]); } }2. 从列表中抽取
借助或这类集合类同样能够达成抽奖, 尤其当属在对候选人进行动态添加或者删除之际。
import java.util.ArrayList; import java.util.List; import java.util.Random; public class LotteryFromList { public static void main(String[] args) { List candidates = new ArrayList<>(); candidates.add("Alice"); candidates.add("Bob"); candidates.add("Charlie"); candidates.add("David"); candidates.add("Eva"); Random random = new Random(); // 生成一个0到candidates.size()-1之间的随机数 int index = random.nextInt(candidates.size()); // 输出中奖者 System.out.println("中奖者是:" + candidates.get(index)); } }candidates = new ArrayList<>(); candidates.add("Alice"); candidates.add("Bob"); candidates.add("Charlie"); candidates.add("David"); candidates.add("Eva"); Random random = new Random(); // 生成一个0到candidates.size()-1之间的随机数 int index = random.nextInt(candidates.size()); // 输出中奖者 System.out.println("中奖者是:" + candidates.get(index)); } }3. 基于权重的抽奖
有些情形下, 各个候选人的中奖几率或许有别, 如此便要达成依据权重的抽奖。
import java.util.ArrayList; import java.util.List; import java.util.Random; public class LotteryWithWeights { static class Candidate { String name; int weight; // 权重 public Candidate(String name, int weight) { this.name = name; this.weight = weight; } } public static void main(String[] args) { List candidates = new ArrayList<>(); candidates.add(new Candidate("Alice", 1)); candidates.add(new Candidate("Bob", 3)); candidates.add(new Candidate("Charlie", 1)); candidates.add(new Candidate("David", 2)); candidates.add(new Candidate("Eva", 3)); Random random = new Random(); int totalWeight = 0; for (Candidate candidate : candidates) { totalWeight += candidate.weight; } int target = random.nextInt(totalWeight) + 1; int sum = 0; for (Candidate candidate : candidates) { sum += candidate.weight; if (sum >= target) { System.out.println("中奖者是:" + candidate.name); break; } } } }candidates = new ArrayList<>(); candidates.add(new Candidate("Alice", 1)); candidates.add(new Candidate("Bob", 3)); candidates.add(new Candidate("Charlie", 1)); candidates.add(new Candidate("David", 2)); candidates.add(new Candidate("Eva", 3)); Random random = new Random(); int totalWeight = 0; for (Candidate candidate : candidates) { totalWeight += candidate.weight; } int target = random.nextInt(totalWeight) + 1; int sum = 0; for (Candidate candidate : candidates) { sum += candidate.weight; if (sum >= target) { System.out.println("中奖者是:" + candidate.name); break; } } } }在上述依照权重进行抽奖的示例里头, 我们定义了一类, 这类的用法是去存储候选人的具体姓名以及其相应权重。而后, 是使用逐次累加权重这种举措, 同时再生成一个随机数值, 借助这个随机数去裁定中奖者。需要上心提醒的是, 在此处我们运用.( ) + 1这样的方式, 其目标在于保证所生成的随机数是处于范围从1到总的权重的值域之内的, 并且这个值域是涵盖两端值数的, 通过此种方式来防止因为数值为0而引发的各类问题。最终, 借由一项操作, 就是去逐个遍历排列好的候选人列表, 同时在此期间顺着每次循环操作进行累加权重这项重复性动作时, 去找出数值大于或者恰好等同于所生成随机数的首个候选人, 从而将此候选人认定为中奖者。
下面这三种办法, 各自适用不一样的情景, 能够依照实际的需求, 去挑选采用。
到这个地方, 这一篇有关Java实现随机抽奖的方法小结的文章, 就介绍到这儿咯逗号更多相关Java随机抽奖的内容, 需要去搜索我以前的文章, 或者继续浏览下面相关的文章哈逗号希望大家以后多多给予我支持,谢谢!