7 Math.random()方法与数组存储
一、代码演示
这个版本的抽奖程序 LotteryDrawing3_7 是一个简易的抽奖号码随机生成器。它模拟了彩票抽奖的过程,从用户指定的号码池中随机抽取一组号码。这个程序利用了 Math.random() 来生成随机数,并确保每个抽取的号码都是唯一的。
import java.util.Arrays;
import java.util.Scanner;
public class LotteryDrawing3_7 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("抽奖游戏开始了!你可以抽几次?");
int k = scanner.nextInt(); // 用户输入要抽取的次数
System.out.println("你想设置多少个号码?");
int n = scanner.nextInt(); // 用户输入号码总数
// 初始化号码池
int[] numbers = new int[n];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i + 1;
}
// 存储抽奖结果
int[] result = new int[k];
for (int i = 0; i < result.length; i++) {
int r = (int) (Math.random() * n); // 生成随机索引
result[i] = numbers[r]; // 从号码池中选出随机号码
// 为了确保不重复,替换已选号码为池中最后一个,并减少池大小
numbers[r] = numbers[n - 1];
n--; // 缩小号码池范围
}
// 对抽取的结果排序
Arrays.sort(result);
System.out.println("下注下面的组合,会让你发财!");
for (int r : result) {
System.out.println(r);
}
}
}
二、运行效果
抽奖游戏开始了!你可以抽几次?
(你输入)5
你想设置多少个号码?
(你输入)50
下注下面的组合,会让你发财!
3
11
27
33
45
三、代码解释
1.用户输入:
用户需要输入两个数字:
k:抽取次数(例如,用户希望从号码池中随机抽 5 个号码)。
n:号码池的大小(例如,总共有 50 个号码可以选择)。
2.初始化号码池:
使用一个数组 numbers
来存储从 1 到 n 的所有号码。
例如,若 n 为 50,则 numbers
数组包含 1 到 50 的所有整数。
3.随机抽取号码:
使用 Math.random() 生成 [0, n-1] 范围内的随机索引。
从 numbers
数组中选择对应的号码,并将其存入结果数组 result
。
为了防止重复选择,将已抽取的号码替换为号码池中最后一个未抽取的号码,并缩小号码池的大小 n--
。
4.排序与输出:
使用 Arrays.sort() 对结果数组进行升序排序,让抽取的号码按照从小到大的顺序显示。
最后输出结果,用户可以看到随机抽取的号码组合。
四、思考
- 防止重复选择:
- 使用了 交换抽取法,即每次从号码池中随机选择一个号码后,将其替换为池中最后一个未抽取的号码,避免了重复选择。
- 排序:
- 对抽取的号码进行排序,使其输出更有条理,符合实际彩票号码排序的习惯。
五、总结
通过这个案例,你学会了如何在 Java 中使用 Math.random() 生成随机数,并通过数组操作来防止随机抽取时出现重复。这个小程序展示了基本的随机化技术,同时也让你对数组、随机数生成、排序等知识有了进一步的掌握。
是不是已经蠢蠢欲动,想试试这个程序帮你生成一组彩票号码呢?说不定下一个大奖得主就是你哦!
欢迎来到《Java 核心技术之风趣解读》专栏!
朋友们你们好,我是Theodore,这个专栏将会带你以轻松有趣的方式学习《Java 核心技术》这本书中的各种经典案例。每篇文章都会将枯燥的代码变得生动形象,穿插一些编程小故事、段子和贴心的解释,让你在欢乐中掌握 Java 编程的精髓。
不论你是刚接触 Java 的小白,还是希望巩固基础的老手,在这里你都会收获到干货和乐趣。希望你们能够在每篇文章中,不仅学到知识,还能收获一份编程的快乐。
免责声明
本专栏中的所有案例代码和讲解均来源于《Java 核心技术》一书,并经过幽默化加工,仅用于学习和分享,旨在帮助大家更好地理解 Java 编程。
- 非商业用途:所有内容仅供学习和参考,未经允许不得用于商业用途。
- 代码解释:由于风趣讲解涉及到一些轻松幽默的比喻,可能会夸张化或调侃部分编程术语,请以实际代码为准。
- 风险提示:编程是一项严谨的工作,请勿轻易在生产环境中直接使用未经测试的代码。博主会尽力确保代码的正确性,但不对因使用本专栏代码引起的任何问题负责。
- 版权声明:本专栏内容部分引用《Java 核心技术》的案例,相关版权归原书作者所有。本专栏的幽默化讲解和额外内容为原创部分,转载请注明出处。
最后,希望大家在学习的过程中开开心心,不断进步!有任何问题,欢迎在评论区留言讨论。让我们一起在 Java 世界里畅游吧!
原文地址:https://blog.csdn.net/Theodore_1022/article/details/143822219
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!