自学内容网 自学内容网

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 编程。

  1. 非商业用途:所有内容仅供学习和参考,未经允许不得用于商业用途。
  2. 代码解释:由于风趣讲解涉及到一些轻松幽默的比喻,可能会夸张化或调侃部分编程术语,请以实际代码为准。
  3. 风险提示:编程是一项严谨的工作,请勿轻易在生产环境中直接使用未经测试的代码。博主会尽力确保代码的正确性,但不对因使用本专栏代码引起的任何问题负责。
  4. 版权声明:本专栏内容部分引用《Java 核心技术》的案例,相关版权归原书作者所有。本专栏的幽默化讲解和额外内容为原创部分,转载请注明出处。

        最后,希望大家在学习的过程中开开心心,不断进步!有任何问题,欢迎在评论区留言讨论。让我们一起在 Java 世界里畅游吧!


原文地址:https://blog.csdn.net/Theodore_1022/article/details/143822219

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!