【Java】抽奖系统———保姆学习教程

简介: 【Java】抽奖系统———保姆学习教程

一、抽奖系统介绍

抽奖的号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1-33中选择,不允许重复,蓝色球号码从1-16中选择。红色球只看值,不看顺序。

注:我们这里规定一等奖为1000万,二等奖为30万,其他与表中一致。

二、代码实现

1、随机生成中奖号码

1.1、中奖号码createNumber方法

创建一个长度为7的数组存放中奖号码,其中前6个为红球,最后1个为蓝球。

需要注意的是,for循环中,需要把i++放在if判断语句中,当数字重复时不执行i++语句,只有录入成功才进行++操作。

    public static int[] createNumber() {
        int[] arr = new int[7];
        Random r = new Random();
        //生成红球号码
        for (int i = 0; i < 6; ) {
            int redNumber = r.nextInt(33) + 1;
            if (contains(arr, redNumber)) {
                arr[i] = redNumber;
                i++;
            }
        }
        //生成蓝球号码
        int blueNumber = r.nextInt(16) + 1;
        arr[6] = blueNumber;
        return arr;
    }
1.2、控制判断contains方法

当数组arr中有num则返回false,没有则返回true。

    public static boolean contains(int[] arr, int num) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == num) {
                return false;
            }
        }
        return true;
    }

2、用户输入中奖号码

同样创建一个长度为7的数组,利用键盘录入用户输入号码。同样i++需要放入if判断语句中,当录入成功再进行++操作。

public static int[] userInputNumber() {
        int[] arr = new int[7];
        Scanner sc = new Scanner(System.in);
        //输入红球号码
        for (int i = 0; i < 6; ) {
            System.out.println("请输入第" + (i + 1) + "红球号码");
            int redNumber = sc.nextInt();
            if (redNumber >= 1 && redNumber <= 33) {
                if (contains(arr, redNumber)) {
                    arr[i] = redNumber;
                    i++;
                } else {
                    System.out.println("当前红球号码已存在,请重新输入");
                }
            } else {
                System.out.println("当前红球号码超出范围");
            }
        }
        //输入蓝球号码
        while (true) {
            System.out.println("请输入蓝球号码");
            int blueNumber = sc.nextInt();
            if (blueNumber >= 1 && blueNumber <= 16) {
                arr[arr.length - 1] = blueNumber;
                break;
            } else {
                System.out.println("当前蓝球号码超出范围");
            }
        }
        return arr;
    }

3、判断中奖情况

定义redCount和blueCount存放相同球的个数,写for循环时需要注意红球的范围。

    public static void main(String[] args) {
        //随机生成中奖号码
        int[] arr = createNumber();
        //用户输入中奖号码
        int[] userArr = userInputNumber();
        //判断中奖情况
        int redCount = 0;
        int blueCount = 0;
        for (int i = 0; i < userArr.length - 1; i++) {
            int redNumber = userArr[i];
            for (int j = 0; j < arr.length - 1; j++) {
                if (redNumber == arr[j]) {
                    redCount++;
                    break;
                }
            }
        }
        int blueNumber = userArr[userArr.length - 1];
        if (blueNumber == arr[arr.length - 1]) {
            blueCount++;
        }
        int winNum = isWin(redCount, blueCount);
        switch (winNum) {
            case 1 -> System.out.println("恭喜你,中奖1000万");
            case 2 -> System.out.println("恭喜你,中奖30万");
            case 3 -> System.out.println("恭喜你,中奖3000元");
            case 4 -> System.out.println("恭喜你,中奖200元");
            case 5 -> System.out.println("恭喜你,中奖10元");
            case 6 -> System.out.println("恭喜你,中奖5元");
            default -> System.out.println("非常遗憾,没有中奖");
        }
    }
3.1、判断奖项isWin方法

用于判断是否中奖以及中几等奖的函数,几等奖对应返回数字几,并在main中用switch判断。

    public static int isWin(int red, int blue) {
        if (red == 6 && blue == 1)
            return 1;
        else if (red == 6 && blue == 0)
            return 2;
        else if (red == 5 && blue == 1)
            return 3;
        else if ((red == 5 && blue == 0) || (red == 4 && blue == 1))
            return 4;
        else if ((red == 4 && blue == 0) || (red == 3 && blue == 1))
            return 5;
        else if ((red == 2 && blue == 1) || (red == 1 && blue == 1) || (red == 0 && blue == 1))
            return 6;
        else
            return 7;
    }

三、完整代码

import java.util.Random;
import java.util.Scanner;
public class test7 {
    public static void main(String[] args) {
        //随机生成中奖号码
        int[] arr = createNumber();
        //用户输入中奖号码
        int[] userArr = userInputNumber();
        //判断中奖情况
        int redCount = 0;
        int blueCount = 0;
        for (int i = 0; i < userArr.length - 1; i++) {
            int redNumber = userArr[i];
            for (int j = 0; j < arr.length - 1; j++) {
                if (redNumber == arr[j]) {
                    redCount++;
                    break;
                }
            }
        }
        int blueNumber = userArr[userArr.length - 1];
        if (blueNumber == arr[arr.length - 1]) {
            blueCount++;
        }
        int winNum = isWin(redCount, blueCount);
        switch (winNum) {
            case 1 -> System.out.println("恭喜你,中奖1000万");
            case 2 -> System.out.println("恭喜你,中奖30万");
            case 3 -> System.out.println("恭喜你,中奖3000元");
            case 4 -> System.out.println("恭喜你,中奖200元");
            case 5 -> System.out.println("恭喜你,中奖10元");
            case 6 -> System.out.println("恭喜你,中奖5元");
            default -> System.out.println("非常遗憾,没有中奖");
        }
    }
    public static int isWin(int red, int blue) {
        if (red == 6 && blue == 1)
            return 1;
        else if (red == 6 && blue == 0)
            return 2;
        else if (red == 5 && blue == 1)
            return 3;
        else if ((red == 5 && blue == 0) || (red == 4 && blue == 1))
            return 4;
        else if ((red == 4 && blue == 0) || (red == 3 && blue == 1))
            return 5;
        else if ((red == 2 && blue == 1) || (red == 1 && blue == 1) || (red == 0 && blue == 1))
            return 6;
        else
            return 7;
    }
    public static int[] userInputNumber() {
        int[] arr = new int[7];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 6; ) {
            System.out.println("请输入第" + (i + 1) + "红球号码");
            int redNumber = sc.nextInt();
            if (redNumber >= 1 && redNumber <= 33) {
                if (contains(arr, redNumber)) {
                    arr[i] = redNumber;
                    i++;
                } else {
                    System.out.println("当前红球号码已存在,请重新输入");
                }
            } else {
                System.out.println("当前红球号码超出范围");
            }
        }
        while (true) {
            System.out.println("请输入蓝球号码");
            int blueNumber = sc.nextInt();
            if (blueNumber >= 1 && blueNumber <= 16) {
                arr[arr.length - 1] = blueNumber;
                break;
            } else {
                System.out.println("当前蓝球号码超出范围");
            }
        }
        return arr;
    }
    public static int[] createNumber() {
        int[] arr = new int[7];
        Random r = new Random();
        for (int i = 0; i < 6; ) {
            int redNumber = r.nextInt(33) + 1;
            if (contains(arr, redNumber)) {
                arr[i] = redNumber;
                i++;
            }
        }
        int blueNumber = r.nextInt(16) + 1;
        arr[6] = blueNumber;
        return arr;
    }
    public static boolean contains(int[] arr, int num) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == num) {
                return false;
            }
        }
        return true;
    }
}

此次双色球彩票系统的内容就到此为止了,相信大家也能够做出属于自己的双色球彩票系统,这个系统最重要的是代码思维而不是代码本身,理解代码思维能够得到更大的提升。

如果觉得作者写的不错,求给作者一个大大的点赞支持一下,你们的支持是我更新的最大动力!

目录
相关文章
|
2天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
23 4
|
2天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
20 4
|
2天前
|
Java 数据库连接 数据处理
探究Java异常处理【保姆级教程】
Java 异常处理是确保程序稳健运行的关键机制。它通过捕获和处理运行时错误,避免程序崩溃。Java 的异常体系以 `Throwable` 为基础,分为 `Error` 和 `Exception`。前者表示严重错误,后者可细分为受检和非受检异常。常见的异常处理方式包括 `try-catch-finally`、`throws` 和 `throw` 关键字。此外,还可以自定义异常类以满足特定需求。最佳实践包括捕获具体异常、合理使用 `finally` 块和谨慎抛出异常。掌握这些技巧能显著提升程序的健壮性和可靠性。
17 4
|
2天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
12 1
|
7天前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
34 7
|
28天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
2天前
|
前端开发 Java 开发工具
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
13 0
|
16天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
74 17
|
27天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
12天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题