java小案例-双色球
案例需求:用户输入一组由6个红球和1个蓝球组成的数字,系统随机生成一组数字,通过判断是否一致来辨别是否中奖
//红色球号码由1-33从选择 蓝色球号码由1-16中选择
//中奖条件与奖金数
/**
* 红色0+蓝色1, 红1+蓝1, 六等奖 5元
* 红2+蓝1,红3+蓝1,红4+蓝0 五等奖 10元
* 红4+蓝1,红5+蓝0 四等奖 200元
* 红5+蓝1 三等奖 3000元
* 红6+蓝0 二等奖 500万元
* 红6+蓝1 一等奖 1000万元
*/
该案例可以分成三部分,分别是系统随机生成一组中奖号码,用户自身输入号码和判断中奖情况
1.系统随机生成中奖号码
public static int[] createLuckNumbers(){ //建立一组数组,存储7个球的号码 int[] numbers=new int[7]; //随机生成 Random r=new Random(); for (int i = 0; i < numbers.length-1; i++) { //先生成6个红球 1-33,且不要重复的 while (true) { //新建一个变量,接收随机生成的数字 int data = r.nextInt(33) + 1; //新建一个信号量,判断新生成的数字是否重复 boolean flat=true;//没有重复 //number【j】是一组新生成的数字 for (int j = 0; j < i; j++) { if(numbers[j]==data){ flat=false; break; } } if(flat){ numbers[i]=data; break; } } } //l蓝球1-16 随机生成 numbers[numbers.length-1]= r.nextInt(16)+1; return numbers; }
这部分的流程是:a.定义数组,用于存储生成的号码
b.使用Random方法随机生成。
c.因为是双色球,所以要分开生成蓝球号码和红球号码,并且根据要求红球要1-33内的数字,且必须不能重复的。
d.遍历数组,设置数组的前六位用来存储红球的号码,因为必须要不重复,所以要设置一个信号量判断生成的数字是否重复,在死循环里判断,然后通过遍历检查新生成的数字与已经生成的数字是否重复,如果重复则信号量为false,遍历终止,重新进入死循环生成新的数字,重复操作,直到生成六个不重复数字的红球,然后把这些数字存放到数组中,跳出for循环,生成最后一个蓝球号码,并放入数组中。
2.用户自身输入一组号码
public static int[] userInputNumbers(){ //建立一组数组,存储用户输入的数字 int[] numbers=new int[7]; //键盘输入 Scanner sc=new Scanner(System.in); //循环输入1-6个号码范围1-33,且不重复的 for (int i = 0; i < numbers.length-1; i++) { System.out.println("请你输入第"+(i+1)+"个号码(1-33,且不重复):"); //设置变量接收用户输入的数字 int data=sc.nextInt(); //将接收的数字放入存储的数组中 numbers[i]=data; } //用户输出蓝球号码1-16 System.out.println("请你输入蓝色球的号码(1-16):"); int data= sc.nextInt(); numbers[numbers.length-1]=data; return numbers; }
该部分的流程:a.新建数组,用来存储用户输入的数字。
b.通过引用Scanner方法,键入用户所想要输入的数字
c.通过遍历数组,输入具有良好的用户性的语句,设置一个变了接收用户输入的数字,并存入数组中
d.跳出for循环,输入蓝球号码,放入数组中。
3.判断中奖情况
//判断是否中奖了 public static void judge(int[] luckNumbers, int[] userLuckNumber){ //设置两个变量,分别判断红球和蓝球的个数 int redHitNumbers=0; int blueHitNumber=0; //遍历随机生成的号码与用户输入的号码 红球 for (int i = 0; i < luckNumbers.length-1; i++) { for (int j = 0; j < userLuckNumber.length-1; j++) { if(userLuckNumber[j]==luckNumbers[i]){ redHitNumbers++; break; } } } //判断蓝球号码 blueHitNumber= userLuckNumber[6] == luckNumbers[6] ? 1:0; System.out.println("本期的中奖号码分别是:"); printArray(luckNumbers); System.out.println("您输入的号码分别是"); printArray(userLuckNumber); System.out.println("您所中的红球号码数是:"+redHitNumbers); System.out.println("您是否命中蓝球:"+(blueHitNumber==1? "是":"否")); //判断中奖情况 if(redHitNumbers<3 &&blueHitNumber==1) { System.out.println("恭喜你中了六等奖,获得了5块钱!!!!"); }else if(redHitNumbers == 3 && blueHitNumber ==1 || redHitNumbers ==4 && blueHitNumber ==0 ){ System.out.println("恭喜你中了五等奖,获得了10块钱!!!!"); }else if (redHitNumbers ==4 && blueHitNumber == 1 || redHitNumbers == 5 && blueHitNumber ==0){ System.out.println("恭喜你中了四等奖,获得了200元大奖!!!"); }else if(redHitNumbers ==5 && blueHitNumber==1){ System.out.println("恭喜你中了三等奖,获得了3000元特大奖!!!"); }else if(redHitNumbers == 6 && blueHitNumber == 0){ System.out.println("恭喜你中了二等奖,获得了500万元现金巨奖!!!!"); }else if(redHitNumbers==6 &&blueHitNumber==1){ System.out.println("恭喜你中了一等奖,获得了1000万元现金超级巨奖,可以享受人生不用奋斗了"); }else { System.out.println("对不起,您没有中奖,很遗憾,感谢您为慈善事业做出了杰出的贡献"); } }
该部分的流程:a.设置存储红球与蓝球个数的变量;
b.遍历查找系统随机生成的号码与用户输入的号码是否有一样的,若是有则红球数量加1,因为先判断红球的,然后跳出for循环使用三元运算符的方法判断蓝球号码是否一样。
c.通过if...else结构判断中奖情况
4.感想与不足之处
通过做这个案例,有很多逻辑理不通,比如随机生成号码判断是否重复那一部分就卡壳了许久,起初没有想到要用死循环,但是通过做完案例收获颇丰。
不足之处:自我感觉后期可以完善这个程序,比如:编写出友好的用户交互界面,还有设置用户输入红球的号码必须是1-33,否则就会报错等的一些完善。
5.完整代码:
package com.study.day6; import java.util.Random; import java.util.Scanner; public class ShuangSeQiuDemo7 { public static void main(String[] args) { //案例:用户输入一组由6个红球和1个蓝球组成的数字,系统随机生成一组数字,通过判断是否一致来辨别是否中奖 //红色球号码由1-33从选择 蓝色球号码由1-16中选择 //中奖条件与奖金数 /** * 红色0+蓝色1, 红1+蓝1, 六等奖 5元 * 红2+蓝1,红3+蓝1,红4+蓝0 五等奖 10元 * 红4+蓝1,红5+蓝0 四等奖 200元 * 红5+蓝1 三等奖 3000元 * 红6+蓝0 二等奖 500万元 * 红6+蓝1 一等奖 1000万元 */ //随机生成 int[] luckNumbers=createLuckNumbers(); //printArray(luckNumbers); //用户自选号码 int[] userLuckNumber=userInputNumbers(); // printArray(userLuckNumber); //判断中奖情况 judge(luckNumbers,userLuckNumber); } //判断是否中奖了 public static void judge(int[] luckNumbers, int[] userLuckNumber){ //设置两个变量,分别判断红球和蓝球的个数 int redHitNumbers=0; int blueHitNumber=0; //遍历随机生成的号码与用户输入的号码 红球 for (int i = 0; i < luckNumbers.length-1; i++) { for (int j = 0; j < userLuckNumber.length-1; j++) { if(userLuckNumber[j]==luckNumbers[i]){ redHitNumbers++; break; } } } //判断蓝球号码 blueHitNumber= userLuckNumber[6] == luckNumbers[6] ? 1:0; System.out.println("本期的中奖号码分别是:"); printArray(luckNumbers); System.out.println("您输入的号码分别是"); printArray(userLuckNumber); System.out.println("您所中的红球号码数是:"+redHitNumbers); System.out.println("您是否命中蓝球:"+(blueHitNumber==1? "是":"否")); //判断中奖情况 if(redHitNumbers<3 &&blueHitNumber==1) { System.out.println("恭喜你中了六等奖,获得了5块钱!!!!"); }else if(redHitNumbers == 3 && blueHitNumber ==1 || redHitNumbers ==4 && blueHitNumber ==0 ){ System.out.println("恭喜你中了五等奖,获得了10块钱!!!!"); }else if (redHitNumbers ==4 && blueHitNumber == 1 || redHitNumbers == 5 && blueHitNumber ==0){ System.out.println("恭喜你中了四等奖,获得了200元大奖!!!"); }else if(redHitNumbers ==5 && blueHitNumber==1){ System.out.println("恭喜你中了三等奖,获得了3000元特大奖!!!"); }else if(redHitNumbers == 6 && blueHitNumber == 0){ System.out.println("恭喜你中了二等奖,获得了500万元现金巨奖!!!!"); }else if(redHitNumbers==6 &&blueHitNumber==1){ System.out.println("恭喜你中了一等奖,获得了1000万元现金超级巨奖,可以享受人生不用奋斗了"); }else { System.out.println("对不起,您没有中奖,很遗憾,感谢您为慈善事业做出了杰出的贡献"); } } public static int[] userInputNumbers(){ //建立一组数组,存储用户输入的数字 int[] numbers=new int[7]; //键盘输入 Scanner sc=new Scanner(System.in); //循环输入1-6个号码范围1-33,且不重复的 for (int i = 0; i < numbers.length-1; i++) { System.out.println("请你输入第"+(i+1)+"个号码(1-33,且不重复):"); //设置变量接收用户输入的数字 int data=sc.nextInt(); //将接收的数字放入存储的数组中 numbers[i]=data; } //用户输出蓝球号码1-16 System.out.println("请你输入蓝色球的号码(1-16):"); int data= sc.nextInt(); numbers[numbers.length-1]=data; return numbers; } //输出方法 public static void printArray(int[] arr){ for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+"\t"); } System.out.println();//换行 } public static int[] createLuckNumbers(){ //建立一组数组,存储7个球的号码 int[] numbers=new int[7]; //随机生成 Random r=new Random(); for (int i = 0; i < numbers.length-1; i++) { //先生成6个红球 1-33,且不要重复的 while (true) { //新建一个变量,接收随机生成的数字 int data = r.nextInt(33) + 1; //新建一个信号量,判断新生成的数字是否重复 boolean flat=true;//没有重复 //number【j】是一组新生成的数字 for (int j = 0; j < i; j++) { if(numbers[j]==data){ flat=false; break; } } if(flat){ numbers[i]=data; break; } } } //l蓝球1-16 随机生成 numbers[numbers.length-1]= r.nextInt(16)+1; return numbers; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!