Java:双色球案例

文章目录

  • 题目
  • 最终代码及运行结果
  • 过程中出现的问题
    • 判断选取的小球数字是否满足条件
    • 获奖多少没输出
    • 其他问题
  • 学到的东西

题目

在这里插入图片描述

最终代码及运行结果

package com.zhang;
/*
双色球案例:
投注号码由6个红球和1个蓝球号码组成。红色球号码从1——33中选择,蓝色球号码从1——16中选择。(号码不能重复)思路:
1.写一个userSelectNumBers()方法,接受用户输入的球的号码。
2.写一个luckNumbers()方法,是系统随机产生的中奖双色球号码
3.写一个judge()方法,判断用户有几个球是匹配中奖号码的。*/import java.util.Random;
import java.util.Scanner;public class Test10 {public static void main(String[] args) {int[] userSelectNumbers = userSelectNumbers();int[] luckNumbers = luckNumbers();judge(userSelectNumbers,luckNumbers);}//接收用户选择的双色球public static int[] userSelectNumbers(){//新建一个数组接收输入int[] userNumbers = new int[6];// 初始都为:0 0 0 0 0 0 0Scanner sc = new Scanner(System.in);for (int i = 0; i < userNumbers.length-1; i++) {while (true) {//这个死循环非常巧妙System.out.println("请输入第"+(i+1)+"个红色球的号码(1——33之间):");int num = sc.nextInt();//检查是不是在范围内if(num < 1 || num > 33){System.out.println("您输入的红色号码球不在范围之内,请重新输入:");}else{//此时,号码已经是正确的范围内,检查是否重复if(exist(num,userNumbers)){System.out.println("你输入的数字重复,请检查重新输入:");}else{userNumbers[i] = num;break;}}}}//ctrl+alt+t//接下来接收蓝球号码while (true) {System.out.println("请输入最后一个蓝球的号码(1-16之间):");userNumbers[5] = sc.nextInt();if(userNumbers[5] < 1 || userNumbers[5] > 16){System.out.println("您输入的号码不在范围之内,请检查后重新输入:");}else{break;}}//输出用户选择的双色球号码System.out.println("您选择的双色球号码是:");printNumers(userNumbers);return userNumbers;}public static boolean exist(int number,int[] arr){for (int i = 0; i < arr.length; i++) {if(arr[i] == number){return true;}}return false;}//写一个利用随机数生成的中奖号码求数字public static int[] luckNumbers(){//新建用来存储的数组int[] luckNumbers = new int[6];//利用随机数生成 每个红球Random random = new Random();for (int i = 0; i < luckNumbers.length-1; i++) {while (true) {int num = random.nextInt(33)+1;//还是要检查是不是重复if(!exist(num,luckNumbers)){//这个取  非 也是非常的 妙!!!!!luckNumbers[i] = num;break;}}}//随机数取蓝球//这个是计算机随机取的,所以不会存在出范围,并且只有一个,所以不需要其他的操作luckNumbers[5] = random.nextInt(16)+1;//此时又要输出数组的形式,所以将输出封装为一个方法比较好System.out.println("中奖双色球的号码是:");printNumers(luckNumbers);return luckNumbers;}//就是你要懂 返回值 是什么是怎么判断的,仅仅只是输出,就 void就行public static void printNumers(int[] arr){System.out.print("[");for (int i = 0; i < arr.length; i++) {//这个三目运算符也很巧妙!!!System.out.print(i == arr.length-1 ? arr[i]:arr[i]+",");}System.out.println("]");}//判断中奖的球数的方法public static void judge(int[] userNumbers,int[] luckNumbers){int redcount = 0;int bluecount = 0;//为什么不是boolean,因为最后是算  红色和蓝色个数的//调用exist()方法,查看用户选择的红色小球数字在不在中奖号码内//但是luckNumbers[5]也就是蓝球的号码,在计算的时候不能和这个进行比较,要么就得重复制一个红色小球的数组,再进行比较//这个for是检查红色的for (int i = 0; i < userNumbers.length-1; i++) {for (int j = 0; j < luckNumbers.length-1; j++) {if(userNumbers[i] == luckNumbers[j]){redcount++;}}}//检查蓝色if(userNumbers[5] == luckNumbers[5]){bluecount++;}System.out.println("您最后红色球猜中"+redcount+"个,蓝色球猜中"+bluecount+"个");//已经猜中数量,现在根据数量计算奖金//最简单的方法就是 if-else if ,这种方法最直观if(bluecount == 0){switch (redcount){case 0:case 1:case 2:case 3:System.out.println("感谢您为福利事业做出的贡献!");break;case 4:System.out.println("恭喜您,中奖金10元!");break;case 5:System.out.println("恭喜您,中奖金200元!!");break;case 6:System.out.println("恭喜您,中奖金500万!!!");break;}}else{switch (redcount){case 0:case 1:case 2:System.out.println("恭喜您,中奖金5元!");break;case 3:System.out.println("恭喜您,中奖金10元!");break;case 4:System.out.println("恭喜您,中奖金200元!");break;case 5:System.out.println("恭喜您,中大奖金3000元!");break;case 6:System.out.println("恭喜您,中最高奖金1000万元!");break;}}}
}

过程中出现的问题

判断选取的小球数字是否满足条件

但是我还不懂为什么
我以为能直接赋值
直接在数组里面判断
在这里插入图片描述

那我下面蓝色为什么没事,能正常运行(可能是因为只有一个?)
在这里插入图片描述

修正后
在这里插入图片描述
但是现在判断范围还有问题,原因是没改完整。

获奖多少没输出

在这里插入图片描述

我就说为什么代码逻辑没问题,位置也是对的,也是if 和switch的正确用法但是就是没输出。
我以为是下面的那买没运行,其实不是,是因为我只写了中奖的情况,没写剩下没中奖的情况。
虽然我运行了好多次,但是中奖率实在是太低,所以代码就没输出。

其他问题

  1. 当用户键盘输入小数直接会报错,因为你定义的是int[] 类型的数组,输入小数是不符合规则的。
    在这里插入图片描述

学到的东西

  1. 三目运算符的使用,非常巧妙
    打印数组的形式
System.out.print(i == arr.length-1 ? arr[i]:arr[i]+",");
  1. 快捷键
    ctrl+alt+t :选择一段内容放进if或者while等
    alt+回车:把你在主函数调用的方法 生成框架
  2. while(true)死循环非常好用,记得break;
  3. 数组遍历:arr.fori 快捷键
  4. 数字创建未赋值是 都为0
  5. 方法返回值:直接输出的方法 返回值为void就行
  6. 在这道题:
    (1) 因为是根据命中数量计算奖金,所以蓝球用int 计算比boolean类型要好
    (2)双色球不需要位置一一对应,因为双色球本身在买的时候就是按照从小到大的顺序排列的。也就是说,只需要看用户选择的小球数字在不在中奖球数字里面,有几个。不需要位置一一对应。
    (3)调用exist()方法,查看用户选择的红色小球数字在不在中奖号码内。但是luckNumbers[5]也就是蓝球的号码,在计算的时候不能和这个进行比较,要么就得重复制一个红色小球的数组,再进行比较。

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

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

相关文章

深度学习-注意力机制和分数

深度学习-注意力机制 注意力机制定义与起源原理与特点分类应用领域实现方式优点注意力机制的变体总结注意力分数定义计算方式注意力分数的作用注意力分数的设计总结 注意力机制&#xff08;Attention Mechanism&#xff09;是一个源自对人类视觉研究的概念&#xff0c;现已广泛…

jenkins 自动化任务构建案例

一新建Item 输入一个名称&#xff0c;点击Freestyle project 进入到配置项 选择 This project is parameterized&#xff0c;点击String Parameter 添加 变量值 command添加执行的命令 二构建 点击build构建触发器 三查看控制台 控制台输出信息无误

VB.NET实现上位机自动识别可用串口

在实际应用中有时会牵扯到挑选可用串口&#xff0c;比如上位机和从站设备使用Modbus RTU协议进行通讯时需要选择COM串口&#xff0c;每次启动连接前都在设备管理器查看较为麻烦&#xff0c;可以设置一个串口自动识别功能&#xff0c;如果选择了错误的串口还可以提示串口选择错误…

fdtd(时域有限差分)仿真

FDTD Solutions 是一款非常好用的微纳光学设计工具。该软件提供了丰富的设计功能&#xff0c;支持 CMOS 图像传感器&#xff0c;OLED 和液晶&#xff0c;表面计量&#xff0c;表面等离子体&#xff0c;石墨烯&#xff0c;太阳能电池&#xff0c;集成光子组件&#xff0c;超材 料…

2024年水利水电技术与能源环境国际会议(ICWRHTEE2024)

2024年水利水电技术与能源环境国际会议(ICWRHTEE2024) 会议简介 2024国际水利水电技术与能源环境大会&#xff08;ICWRHTEE 2024&#xff09;将在中国深圳举行。 我们主要专注于水利水电技术和能源环境研究领域&#xff0c;致力于为国内外不同大学、研究院所、企事业单位的专…

11_1、多态性:概念及运算符重载

多态性 多态的概念和类型多态的类型多态的实现 运算符重载运算符重载的概念和规则概念规则 运算符重载为类的成员函数双目运算符单目运算符 运算符重载为类的友元函数双目运算符重载单目运算符重载 多态的概念和类型 消息&#xff1a;消息在C编程中指的是对类的成员函数的调用…

[2024-06]-[大模型]-[Ollama]- WebUI

主要涉及要部署的前端webui是来源于:https://github.com/open-webui/open-webui 正常就使用: docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-web…

【机器学习】基于CNN-RNN模型的验证码图片识别

1. 引言 1.1. OCR技术研究的背景 1.1.1. OCR技术能够提升互联网体验 随着互联网应用的广泛普及&#xff0c;用户在日常操作中频繁遇到需要输入验证码的场景&#xff0c;无论是在登录、注册、支付还是其他敏感操作中&#xff0c;验证码都扮演着重要角色来确保安全性。然而&am…

不谈AI能替代什么,就聊能帮我们干活的AI客服机器人!

最近在直播群里有老板在找客服外包&#xff0c;因为客服压力大&#xff0c;接不过来了&#xff0c;想找找外包支援一下。据了解电商客服除了压力大&#xff0c;还会遇到过量的重复劳动&#xff0c;比如我们问一个产品&#xff0c;同一天可能就有几百上千客户问同样的问题&#…

[Shell编程学习路线]--shell中重定向和管道符(详细介绍)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月12日10点50分 &#x1f004;️文章质量&#xff1a;93分 ——前言—— 在Shell编程中&#xff0c;重定向和管道符是两个…

短剧系统满足个性化需求,推动行业持续发展

一、短剧市场背景&#xff0c;行业发展迅速 随着科技的不断进步和观众需求的日益多样化&#xff0c;传统的影视制作方式已无法满足市场和观众的需求。因此&#xff0c;随着ai智能运用的发展&#xff0c;短剧系统以用户体验为中心&#xff0c;围绕观影体验和增强用户黏性展开设计…

mac 安装HomeBrew

目录 一、HomeBrew是什么&#xff1f;二、HomeBrew命令1、检查是否安装HomeBrew2、更新brew版本 三、安装HomeBrew1、官网安装2、100%成功安装 一、HomeBrew是什么&#xff1f; homebrew是一款Mac OS平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等功能…

echart盒子没有跟着当前div大小变化而自适应

一、问题描述 当echarts图表在一个盒子里的时候&#xff0c;盒子大小变化了&#xff0c;但是图表没有跟着自适应&#xff0c;比如这样&#xff0c;盒子变大了&#xff0c;但是图表没变化 二、解决方法 在盒子大小更改的同时&#xff0c;调用图表的resize方法&#xff0c;记…

Linux kernel本地权限提升漏洞(CentOS8升级内核的解决方案)

一、CentOS8升级kernel内核的必要性 1、增强系统的安全性。 升级CentOS内核可以提供更好的安全性保障。新的内核版本通常包含了的安全补丁和漏洞修复&#xff0c;可以有效防止系统遭受恶意攻击&#xff0c;提高系统的稳定性和安全性。 2、优化硬件兼容性。 CentOS升级内核可以…

盐酸酸洗废水合理的处理手段

盐酸酸洗废水处理是工业生产中一项重要的环保措施&#xff0c;特别是在钢铁、金属加工等行业中&#xff0c;酸洗废水因其高酸性和高金属离子含量而需要得到妥善处理。以下是对盐酸酸洗废水处理的详细分析和讨论。 一、盐酸酸洗废水的特性 盐酸酸洗废水主要来源于钢材的酸洗线&a…

Golang——gRPC认证

一. OpenSSL 1.1 介绍 OpenSSL是一个开放源代码的软件库包&#xff0c;用于支持网络通讯过程中的加密。这个库提供的功能包含了SSL和TLS协议的实现&#xff0c;并可用于生成密钥、证书、进行密码运算等。 其组成主要包括一下三个组件&#xff1a; openssl&#xff1a;多用途的命…

MTK烧录USB驱动下载

下载链接 https://www.catalog.update.microsoft.com/Search.aspx?qMediaTek%20USB%20Port 驱动安装教程 https://miuiver.com/install-official-mediatek-driver/

@Test注解方法,方法无法执行

1.背景 写了一个测试方法,执行后如图 2.原因是 该项目是springbootgradle...构建的项目 在build.gradle配置文件中关闭了单元测试: test {useJUnitPlatform()// 是否启用单元测试enabled false } 3.处理方式 开启单元测试 test {useJUnitPlatform()// 是否启用单元测试ena…

操作系统复习-Linux的文件系统

文件系统概述 FAT FAT(File Allocation Table)FAT16、FAT32等&#xff0c;微软Dos/Windows使用的文件系统使用一张表保存盘块的信息 NTFS NTFS (New Technology File System)WindowsNT环境的文件系统NTFS对FAT进行了改进&#xff0c;取代了日的文件系统 EXT EXT(Extended…

全域推广是什么意思?业务范围有哪些?

随着全域时代的到来&#xff0c;与全域相关的各种概念不断涌现&#xff0c;引发了一轮又一轮的热议。在此背景下&#xff0c;全域推广一经出现便一跃成为了互联网的有一大热词&#xff0c;以全域推广是什么意思为代表的相关问题也成为了多个创业者社群中的热点话题。 相关资料显…