Java实现随机奖券抽奖模拟程序
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class LotterySimulation { public static void main(String[] args) { int numberOfParticipants = 1000; // 参与人数 List<Integer> tickets = new ArrayList<>(numberOfParticipants); // 初始化奖券列表 for (int i = 1; i <= numberOfParticipants; i++) { tickets.add(i); } // 打乱奖券顺序 Collections.shuffle(tickets); // 模拟每个参与者抽取一张奖券 List<Integer> assignedTickets = new ArrayList<>(tickets.size()); for (int i = 0; i < tickets.size(); i++) { int ticketNumber = tickets.get(i); System.out.println("Participant " + (i + 1) + ": Ticket Number - " + ticketNumber); assignedTickets.add(ticketNumber); // 记录分配的奖券 } // 验证每个参与者都得到了一张唯一的奖券 Collections.sort(assignedTickets); for (int i = 0; i < assignedTickets.size(); i++) { if (!assignedTickets.get(i).equals(i + 1)) { throw new RuntimeException("Error in ticket assignment!"); } } System.out.println("All participants have been assigned unique tickets successfully."); } }
解释代码:
初始化奖券列表:创建一个包含从1到1000的整数列表,表示1000张不同的奖券。
打乱顺序:使用Collections.shuffle()方法随机打乱这些奖券。
分配奖券:遍历被打乱后的奖券列表,并为每个参与者分配一张奖券。每分配一次就在控制台输出结果。
验证唯一性:将已分配的奖券排序后,检查是否与原始序号匹配(即1, 2, ..., 1000),以确保没有重复或遗漏。
这个程序可以运行并生成每个参与者随机获取到的一张奖券。如果有更多的并发需求或者需要进行多线程处理,请根据实际场景进一步优化代码。