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

目录

 一、抽奖系统介绍

 二、代码实现

1、随机生成中奖号码

1.1、中奖号码createNumber方法

 1.2、控制判断contains方法

2、用户输入中奖号码

3、判断中奖情况

3.1、判断奖项isWin方法 

三、完整代码


 一、抽奖系统介绍

抽奖的号码由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;elsereturn 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;elsereturn 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;}
}

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧园区:AI边缘计算技术与视频监控汇聚平台打造智慧园区解决方案

一、行业趋势与背景 智慧园区是现代城市发展的重要组成部分&#xff0c;通过智能化技术提高园区的运营效率、降低成本、增强环境可持续性等具有重要作用。在智慧园区中&#xff0c;人工智能和视频汇聚技术是重要的前置技术。人工智能技术可以实现对数据的智能化处理和分析&…

时序数据库 TimescaleDB 安装与使用

TimescaleDB 是一个时间序列数据库&#xff0c;建立在 PostgreSQL 之上。然而&#xff0c;不仅如此&#xff0c;它还是时间序列的关系数据库。使用 TimescaleDB 的开发人员将受益于专门构建的时间序列数据库以及经典的关系数据库 (PostgreSQL)&#xff0c;所有这些都具有完整的…

2023/9/13 -- C++/QT

作业&#xff1a; 1> 将之前定义的栈类和队列类都实现成模板类 栈&#xff1a; #include <iostream> #define MAX 40 using namespace std;template <typename T> class Stack{ private:T *data;int top; public:Stack();~Stack();Stack(const Stack &ot…

TouchGFX之缓存位图

位图缓存是专用RAM缓冲区&#xff0c;应用可将位图保存&#xff08;或缓存&#xff09;在其中。 如果缓存了位图&#xff0c;在绘制位图时&#xff0c;TouchGFX将自动使用RAM缓存作为像素来源。位图缓存在许多情况下十分有用。 从RAM读取数据通常比从闪存读取要快&#xff08;特…

Linux下Minio分布式存储安装配置(图文详细)

文章目录 Linux下Minio分布式存储安装配置(图文详细)1 资源准备1.1 创建存储目录1.2 获取Minio Server资源1.3 获取Minio Client资源 2 Minio Server安装配置2.1 切换目录2.2 后台启动2.3 查看进程2.4 控制台测试 3 Minio Client安装配置3.1 切换目录3.2 移动mc脚本3.2 运行mc命…

Vue3后台管理系统Element-plus_侧边栏制作_无限递归

在home.view中添加代码 <template><div><div class"common-layout"><el-container><el-header class"common-header flex-float"><div class"flex"><img class"logo" src"../assets/logo…

【Redis】Redis实现分布式锁

【Redis】Redis常见面试题&#xff08;1&#xff09; 文章目录 【Redis】Redis常见面试题&#xff08;1&#xff09;1. 为什么要用分布式锁2. Redis如何实现分布式锁3. Redis接受多个请求模拟演示4. 使用Redis实现分布式锁会存在什么问题4.1 一个锁被长时间占用4.2 锁误删 【Re…

vue2+element-ui批量导入方法并判断上传的文件是否为xls或xlsx

业务需求: 代码结构: <el-dialogtitle"批量导入":close-on-click-modal"true"close"close()":visible"true"width"35%":center"true"><div class"el-dialog-div"><!-- 头部区域布局 -…

【基本数据结构 四】线性数据结构:队列

学习了栈后,再来看看第四种线性表结构,也就是队列,队列和栈一样也是一种受限的线性表结构,和栈后进先出的操作方式不同的是,队列是FIFO的结构,也就是先进先出的操作方式。 队列的定义 队列这个概念非常好理解。可以把它想象成排队买票,先来的先买,后来的人只能站末尾…

软考知识汇总--结构化开发方法

文章目录 1 结构化开发2 耦合3 内聚4 设计原则5 系统文档6 数据流图6.1 数据流图的基本图形元素 7 数据字典 1 结构化开发 结构化方法总的指导思想是自顶向下、逐层分解&#xff0c;它的基本原则是功能的分解与抽象。它是软件工程中最早出现的开发方法&#xff0c;特别适合于数…

「C++程序设计 (面向对象进阶)」学习笔记・二

0、引言 本专栏的系列文章是在学习 北京邮电大学 崔毅东 老师的《C程序设计 (面向对象进阶)》课程过程中整理的。欢迎前往专栏了解更多相关内容~ &#x1f600; 有关于现代 C 的基本介绍&#xff0c;请前往《现代C基本介绍》&#xff01; &#x1f514; 先决条件 本专栏的系列…

定时器+BOM

9.定时器BOM 1.定时器 **概念:**重复执行一个函数 1.1setInterval() setInterval(“代码/函数”,时间,参数),返回定时器的序列号,默认从1开始 clearInterval(序列号)清除定时 <button class"start">开启定时器</button><button class"close…

通过Power Platform自定义D365 CE 业务需求 - 3. 使用Microsoft Power应用程序

Microsoft Power Apps是一个用于开发应用程序的无代码、无代码平台。Power应用程序可以在Dataverse之上配置为数据库。尽管您可以连接Salesforce、OneDrive、Dropbox等多种云源,但Dataverse也可以用作内部数据库来构建应用程序,并通过连接器连接其他数据源进行集成。 Power应…

Java开发之Redis核心内容【面试篇 完结版】

文章目录 前言一、redis使用场景1. 知识分布2. 缓存穿透① 问题引入② 举例说明③ 解决方案④ 实战面试 3. 缓存击穿① 问题引入② 举例说明③ 解决方案④ 实战面试 4. 缓存雪崩① 问题引入② 举例说明③ 解决方案④ 实战面试 5. 缓存-双写一致性① 问题引入② 举例说明③ 解决…

内存管理机制

aCoral内存管理机制 aCoral内存管理机制在伙伴系统基础上&#xff0c;采用了位图法方式提高内存分配和回收速度的确定性&#xff0c;更能满足系统实时性的需求。 aCoral内存管理机制分为两级&#xff0c;上一级采用改进的伙伴系统&#xff0c;负责确定要分配的内存的大小&…

数据分析综述

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

C#类与类库调用注意事项

类 创建一个类文件&#xff0c;myfunction.cs //静态类&#xff1a;直接引用、无需实例化 static public int jiafa(int V) //普通类&#xff1a;引用时需要实例化 public int jiafa(int V)using System; using System.Collections.Generic; using System.Diagnostics; using …

ChatGPT追祖寻宗:GPT-2论文要点解读

论文地址&#xff1a;Language Models are Unsupervised Multitask Learners 上篇&#xff1a;GPT-1论文要点解读 在上篇&#xff1a;GPT-1论文要点解读中我们介绍了GPT1论文中的相关要点内容&#xff0c;其实自GPT模型诞生以来&#xff0c;其核心模型架构基本没有太大的改变&a…

Vue中extend基本用法

1.Vue.extend(options) 参数: {Object} options用法&#xff1a; 使用基础Vue构造器&#xff0c;创建一个"子类"。参数是一个包含组件选项的对象。 data选项是特例&#xff0c;需要注意&#xff0c;在Vue.extend()中它必须是函数。 <html><head><tit…

读高性能MySQL(第4版)笔记08_创建高性能索引(上)

1. 索引 1.1. 键&#xff08;key&#xff09; 1.2. 存储引擎用于快速找到记录的一种数据结构 1.3. 当表中的数据量越来越大时&#xff0c;索引对性能的影响愈发重要 1.4. 在数据量较小且负载较低时&#xff0c;缺少合适的索引对性能的影响可能还不明显 1.5. 索引优化是对查…