news 2026/8/11 14:39:19

抽奖程序Java代码?这3招让你手气开挂,不服来战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
抽奖程序Java代码?这3招让你手气开挂,不服来战

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随机抽奖的内容, 需要去搜索我以前的文章, 或者继续浏览下面相关的文章哈逗号希望大家以后多多给予我支持,谢谢!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/11 14:36:23

天津GEO优化服务商怎么选:信源、模型与合同避坑指南指南

天津企业做数字营销&#xff0c;过去更多关注官网排名和广告投放&#xff1b;进入2026年&#xff0c;还需要关注品牌在生成式AI答案中的可见度和推荐位置。 天津的区县、商圈、产业园区和跨城业务使问题词更加复杂&#xff0c;单一模板很难覆盖真实决策场景。 本文依照完整的天…

作者头像 李华
网站建设 2026/8/11 14:35:20

LogTrawl:开源Web日志分析工具提升威胁检测准确率

1. LogTrawl项目概述LogTrawl是一款专为网络安全领域设计的Web日志分析工具&#xff0c;它能够高效处理各类服务器日志文件&#xff0c;帮助安全团队快速识别潜在威胁。我在实际安全运维中发现&#xff0c;传统日志分析工具往往存在处理速度慢、告警误报率高的问题&#xff0c;…

作者头像 李华
网站建设 2026/8/11 14:34:55

基于Python与Vue的在线C语言教学系统设计与实现

1. 项目背景与核心需求这个在线C语言教学系统的设计初衷源于当前编程教育市场的几个痛点&#xff1a;传统课堂教学缺乏即时反馈、学生练习环境配置复杂、教师难以追踪每个学生的代码质量。作为一个全栈开发者&#xff0c;我决定用Python技术栈打造一个轻量级但功能完备的解决方…

作者头像 李华
网站建设 2026/8/11 14:34:27

Visual Studio默认项目路径修改指南:3种方法提升开发效率

1. 为什么你需要修改VS的默认项目路径&#xff1f;每次打开Visual Studio&#xff0c;点击“创建新项目”&#xff0c;弹出的对话框里那个默认的“位置”路径&#xff0c;是不是总让你感觉有点别扭&#xff1f;对很多人来说&#xff0c;这个默认路径通常是C:\Users\[用户名]\so…

作者头像 李华
网站建设 2026/8/11 14:34:17

IntelliJ IDEA集成Git:从命令行到图形化工作流的高效实践

1. 从“能用”到“好用”&#xff1a;为什么要在IDEA里用Git&#xff1f; 如果你是一个刚入行的Java开发者&#xff0c;或者从Eclipse、NetBeans转战到IntelliJ IDEA&#xff0c;你可能会问&#xff1a;Git命令我都会敲&#xff0c;为什么还要在IDE里折腾&#xff1f;直接在终端…

作者头像 李华
网站建设 2026/8/11 14:33:11

如何在5分钟内完成SMAPI模组加载器安装:星露谷物语模组终极指南

如何在5分钟内完成SMAPI模组加载器安装&#xff1a;星露谷物语模组终极指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 你是否想在星露谷物语中添加新角色、改变游戏机制&#xff0c;或者让你的…

作者头像 李华