投注号码由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("]");
}
}
