投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1 - 33选择;蓝色球号码从1 - 16中选择。
package com;import java.util.Random;
import java.util.Scanner;public class Test {public static void main(String[] args) {// 1.随机一组中奖号码,6个红球号码不重复(1 - 33)和一个蓝球号码(1 - 16),采用数组装起来int[] luckNumbers = createLuckNumbers();// 2.用户录入一组随机号码:6个不重复的红球号码(1 - 33)和1个蓝球号码(1 - 16)int[] userNumbers = userInputNumbers();// 3.判断用户中奖情况judge(luckNumbers,userNumbers);}/** 1.* 随机一组中奖号码并返回,6红(1-33之间不重复),1蓝(1-16)* @return:随机生成7个中奖号码的数组*/public static int[] createLuckNumbers(){// 1.定义一个动态初始化数组,存储7个数字int[] numbers = new int[7];// 遍历数组,为每个位置随机生成一个中奖号码// 2.遍历数组的前6个位置,生成6个不重复的红球号码(1-33)Random r = new Random();for(int i = 0;i < numbers.length - 1;i++){while (true) {int number = r.nextInt(33) + 1;// 标记位/信号位:定义一个flag变量,默认为当前位置随机生成的number是没有重复的boolean flag = true; // 一开始认为number是没有重复的for(int j = 0;j < i;j++){if(numbers[j] == number){ // number重复了,修改标记位flag = false;break; // 跳出并结束当前for循环,再随机一次}}// 说明number没有重复,可以将number存入到数组中去了if(flag){numbers[i] = number; // 将number存入到数组的当前位置break; // 跳出并结束当前死循环,进入下一次循环}}}// 3.为数组的第7个位置/最后一个位置,生成一个1-16之间的蓝球号码numbers[numbers.length - 1] = r.nextInt(16) + 1;// 4.返回随机生成中奖号码的数组return numbers;}/** 2.* 用户随机录入一组中奖号码,6个红球号码(1 - 33)和1个蓝球号码(1 - 16)* @return:返回用户录入7个随机中奖号码的数组*/public static int[] userInputNumbers(){// 1.定义一个动态初始化数组,存储用户录入的7个随机号码int[] numbers = new int[7];// 2.遍历数组的前6个位置,用户依次录入红球号码(1 - 33)且要求不重复Scanner sc = new Scanner(System.in);for(int i = 0;i < numbers.length - 1;i++){while (true) {System.out.println("请您录入第" + (i + 1) + "个红球号码(1 - 33),要求不重复:");int number = sc.nextInt();if(number < 1 || number > 33){System.out.println("您当前录入的第" + (i + 1) + "个号码" + number + "不符合要求!");continue; // 跳出当前死循环的当次执行,进入下一次死循环}// 3.定义一个flag变量,默认number没有重复boolean flag = true;for(int j = 0;j < i;j++){if(numbers[j] == number){ // 说明number重复了flag = false; // number重复了,修改标记位System.out.println(number + "出现重复,请重新录入!");break; // 跳出并结束当前for循环,再次录入一次}}// 说明number没有重复,可以存入到数组中去了if(flag){numbers[i] = number;break; // 跳出并结束当前死循环,进入下一次循环}}}// 4.为数组的第7个位置/最后一个位置生成一个篮球号码(1 - 16)while(true){System.out.println("请您录入第" + (numbers.length) + "个蓝球号码(1 - 16):");int number = sc.nextInt();// 5.定义一个flag变量,默认认为number在1-16之间boolean flag = true;if(number < 1 || number > 16){ // number不符合要求flag = false; // number不符合要求,修改标记位System.out.println("您录入的" + number + "不符合规则,请重新录入!");continue; // 跳出当前死循环的当次执行,进入下一次循环}// number符合要求if(flag){ // number符合要求,可以存入到数组中去了numbers[numbers.length - 1] = number;break; // 跳出并结束当前死循环的执行}}return numbers;}/** 3.* 判断用户中奖情况的方法* @param luckNumbers:系统随机的幸运号码* @param userNumbers:用户录入的号码*/public static void judge(int[] luckNumbers,int[] userNumbers){// 1.定义两个变量,分别记录红球命中个数和蓝球命中个数int redHitNumber = 0; // 红球命中个数int blueHitNumber = 0; // 蓝球命中个数// 2.遍历数组的前6个位置,记录红球的命中个数for(int i = 0;i < luckNumbers.length - 1;i++){for(int j = 0;j < userNumbers.length - 1;j++){if(userNumbers[j] == luckNumbers[i]){redHitNumber++;break; // 跳出并结束内部for循环的执行,进入下一次比对}}}// 3.比较数组的第7个位置/最后一个位置,记录蓝球是否命中blueHitNumber = luckNumbers[luckNumbers.length - 1] == userNumbers[userNumbers.length - 1] ? 1 : 0;System.out.println("中奖号码是:");printArray(luckNumbers);System.out.println("您投注的号码是:");printArray(userNumbers);System.out.println(redHitNumbers > 0 ? "您命中了" + redHitNumbers + "个红球!" : "您没有命中红球!");System.out.println(blueHitNumbers == 1 ? "您命中了蓝球!" : "您没有命中蓝球!");if(redHitNumber == 6 && blueHitNumber == 1){System.out.println("恭喜您喜中1000万!");}else if(redHitNumber == 6 && blueHitNumber == 0){System.out.println("恭喜您喜中500万!");}else if(redHitNumber == 5 && blueHitNumber == 1){System.out.println("恭喜您喜中3000元!");}else if(redHitNumber == 5 && blueHitNumber == 0 || redHitNumber == 4 && blueHitNumber == 1){System.out.println("恭喜您喜中200元!");}else if(redHitNumber == 4 && blueHitNumber == 0 || redHitNumber == 3 && blueHitNumber == 1){System.out.println("恭喜您喜中10元!");}else if(redHitNumber <= 2 && blueHitNumber == 1){System.out.println("恭喜您喜中5元!");}}/** 4.* 打印数组的方法* @param arr:要打印的数组*/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("]");}
}