双色球系统-业务分析、随机生成一组中奖号码
随机一组中奖号码的分析:
l
中奖号码由
6
个红球和
1
个篮球组成
(
注意:
6
个红球要求不能重复
)
。
可以定义方法用于返回一组中奖号码(7个数据),返回的形式是一个整型数组
本次案例中是如何去保证随机的6个中奖的红球号码不重复的
每次随机一个红球号码后去数组中判断是否存在。
存在需要重新随机一个数字直到不重复为止。
双色球系统-用户输入一组双色球号码
用户输入一组双色球号码分析:
定义一个方法,该方法可以录入用户输入的
6
个红球和
1
个篮球号码
该方法最终需要返回一个数组,数组中就是用户录入的号码(7位)
模拟双色球系统-判断中奖情况
中奖情况判断的分析:
定义一个方法,可以接收中奖号码的数组,用户选号的数组。
根据命中红球数和篮球数判断最终的中奖情况并输出详情和中奖金额
本次案例中是如何去统计红球的命中数量的?
遍历用户的每个选号,然后遍历中奖号码的数组。
看当前选号是否在中奖号码中存在,存在则命中数量加
1
。
源码
Demo.java
package com.lly.Practise.Demo;
import java.util.Random;
import java.util.Scanner;
/**
* @Author: lly
* @Description: 双色球系统
* @DateTime: 2022/7/16 18:38
**/
public class Demo {
public static void main(String[] args) {
// 1、随机6个红球号码(1-33 不能重复),随机一个篮球号码(1-16) ,可以采用数组装起来作为中奖号码
int[] luckNumbers= createLuckNumber();
// printArray(luckNumbers);
// 2、调用一个方法让用户输入七个号码作为用户选号
int[] userNumbers = userInputNumbers();
// printArray(userNumbers);
judge(luckNumbers ,userNumbers);
}
/**
* @Author: lly
* @Description: 随机生成中奖号码
* @DateTime: 2022/7/16 19:22
* @Params: []
* @Return int[]
*/
public static int[] createLuckNumber(){
// a.定义一个动态初始化的数组,存储七个数字
int[] numers = new int[7];
// b.遍历数组,为每个位置生成对应的号码(注意 , 遍历前六个位置,生成六个不重复的红球号码,范围是(1-33)
Random r = new Random();
for (int i = 0; i < numers.length; i++) {
while (true){
int data =r.nextInt(33)+1;
// c、注意,必须判断当前随机的号码有没有重复,若重复,则必须要重新随机一个号码 直到不重复为止,才可以存到数组中去
// 定义一个flag变量,默认data没有重复
boolean flag =true;
for (int j = 0; j <i; j++) {
if(numers[j]==data){
// data这个数据之前出现过,不能用
flag=false;
break;
}
}
if(flag){
// 说明data这个数据之前没有出现过 可以使用 并并把它装到数组中去
numers[i]=data;
break;
}
}
}
// d. 为第七个位置生成一个1-16的号码作为蓝球号码
numers[numers.length-1]= r.nextInt(16)+1;
return numers;
}
/**
* @Author: lly
* @Description: 用户选号
* @DateTime: 2022/7/16 19:28
* @Params: []
* @Return int[]
*/
public static int[] userInputNumbers(){
// a.定义一个数组存储七个号码
int[] numers =new int [7];
// b.让用户录入六个红球号码
Scanner sc = new Scanner(System.in);
for (int i = 0; i < numers.length-1 ; i++) {
System.out.println("请您输入第"+(i+1)+"个红球号码(1-33)");
int data = sc.nextInt();
// c、把当前录入的数据存到数组中去
numers[i] = data;
}
System.out.println("请您输入一个蓝球号码(1-16)");
numers[numers.length-1]=sc.nextInt();
return numers;
}
/**
* @Author: lly
* @Description: 遍历输出数组
* @DateTime: 2022/7/16 19:30
* @Params: [arr]
* @Return void
*/
public static void printArray(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("]");
}
/**
* @Author: lly
* @Description: 判断是否中奖
* @DateTime: 2022/7/16 19:54
* @Params: [luckyNumbers, userNumbers]
* @Return void
*/
public static void judge(int[] luckyNumbers , int[] userNumbers){
// 判断是否中奖了
// 1、定义两个变量分别存储红球命中个数与篮球命中个数。
int redHitNumbers = 0;
int blueHitNumbers = 0;
// 2、判断红球命中个数,开始统计
for (int i = 0; i < userNumbers.length-1; i++) {
for (int j = 0; j < luckyNumbers.length-1; j++) {
// 每次找到相等的就意味着当前号码命中了
if (userNumbers[i]==luckyNumbers[j]){
redHitNumbers++;
break;
}
}
}
// 判断篮球号码是否命中
blueHitNumbers= luckyNumbers[luckyNumbers.length-1] == userNumbers[userNumbers.length-1] ? 1:0;
System.out.println("中奖号码是:");
printArray(luckyNumbers);
System.out.println("您选的号码是:");
printArray( userNumbers);
System.out.println("您命中了" +redHitNumbers +"个红球");
System.out.println("您是否命中篮球:" + (blueHitNumbers==1? "是" : "否"));
// 判断中奖情况
if(blueHitNumbers==1 && redHitNumbers<3){
System.out.println("恭喜您中了五元");
}else if ( blueHitNumbers ==1 && redHitNumbers==3 || blueHitNumbers==0 && redHitNumbers==4) {
System.out.println("恭喜你中了十元");
} else if ( blueHitNumbers ==1 && redHitNumbers==4 || blueHitNumbers==0 && redHitNumbers==5) {
System.out.println("恭喜你中了两百元");
} else if ( blueHitNumbers ==1 && redHitNumbers==5) {
System.out.println("恭喜您中了三千元");
} else if (blueHitNumbers ==0 && redHitNumbers==6) {
System.out.println("恭喜您中了五百万");
} else if (blueHitNumbers ==1 && redHitNumbers==6) {
System.out.println("恭喜您中了一千万");
}else {
System.out.println("很遗憾,您没有中奖! 感谢您对福利事业做出的贡献!");
}
}
}