import java.util.Random;
import java.util.Scanner;public class Test8 {public static void main(String[] args) {//双色球系统开发//投注号码由6个红色球号码和1个蓝色球号码组成//红色球号码从1-33中选择,要求选择红球不能重复//蓝色球号码从1-16中选择//共7个数据//1、定义一个方法,生成一组中奖号码int[] luckNumbers = createLuckNumber();//printArray(luckNumbers);//测试//2、调用方法,让用户输入7个号码,作为用户选号int[] userNumbers = userInputNumbers();//printArray(userNumbers);//测试//3、调用判断用户中奖情况的方法judge(luckNumbers, userNumbers);}//打印public static void printArray(int[] arr){for (int i = 0; i < arr.length - 1; i++) {System.out.print(arr[i] + "\t");}System.out.println("(" + arr[arr.length - 1] + ")");System.out.println();}//1、随机一组中奖号码返回public static int[] createLuckNumber(){//定义一个动态初始化数组,存储7个数字int[] numbers = new int[7];//[12, 23, 0, 0, 0, 0, | 0]// i//遍历数组,为每个位置生成相应的号码(注意:遍历前六个位置,生成6个不重复的红球号码,范围是1-33)Random r = new Random();for (int i = 0; i < numbers.length - 1; i++) {//注意:必须去判断当前生成的随机数字不能够重复,出现过要重新随机一个,直到不重复为止,才可以存入数组中去//为当前位置找一个没有重复的1-33之间的数字while (true) {int data = r.nextInt(33) + 1;//(1-33) --> -1 --> (0-32) +1//定义一个flag,默认当前数字是没有重复的boolean flag = true;for (int j = 0; j < i; j++) {if (data == numbers[j]) {//说明当前的随机数与前面的数字由重复flag = false;break;}}if (flag) {//若flag还是true,说明当前数字没有重复,就可以进行赋值numbers[i] = data;//跳出while死循环break;}}}//前面六个红色球号码已经有了,现在选蓝色球号码,为第7位生成一个蓝色球号码1-16//蓝色球号码可以与红球重复numbers[numbers.length - 1] = r.nextInt(16) + 1;//把数组返回return numbers;}//2、用户输入一组双色球号码返回public static int[] userInputNumbers(){//定义一个数组存储用户输入的7个号码int[] numbers = new int[7];//让用户输入6个红球号码(1-33)Scanner sc = new Scanner(System.in);for (int i = 0; i < numbers.length - 1; i++) {//注意:必须去判断当前用户输入的号码不能够重复,出现过要重新选一个,直到不重复为止,才可以存入数组中去//为当前位置找一个没有重复的1-33之间的数字while (true) {System.out.println("请您输入第" + (i + 1) + "个红球号码(1-33): ");int data = sc.nextInt();//(1-33) --> -1 --> (0-32) +1if (data < 1 || data > 33) {//用户输入的号码不在范围之内,进入下一次while循环System.out.println("对不起,您当前输入的号码不在范围之内~~");continue;}//定义一个flag,默认当前用户输入的号码是没有重复的boolean flag = true;for (int j = 0; j < i; j++) {if (data == numbers[j]) {//说明当前用户输入的号码与前面的号码由重复flag = false;System.out.println("您当前输入的号码于前面的号码有冲突~~");break;}}if (flag) {//若flag还是true,说明当前号码没有重复,就可以进行赋值numbers[i] = data;//跳出while死循环,为下一个号码输入break;}}}//输入蓝球号码while(true){System.out.println("请您输入您的蓝球号码(1-16): ");int data = sc.nextInt();boolean flag = true;if (data < 1 || data > 16){System.out.println("对不起,您当前输入的号码不在范围之内~~");flag = false;continue;}numbers[numbers.length - 1] = data;break;}return numbers;}//3、传入两组号码,判断用户中奖情况public static void judge(int[] luckNumbers,int[] userNumbers){//判断是否中奖了,例如//luckNumbers = [12, 23, 8, 16, 15, 32, 9]//userNumbers = [23, 13, 18, 6, 8, 33, 10]//定义2个变量分别存储红球命中的个数,以及蓝球命中的个数int redHitNumbers = 0;int blueHitNumbers = 0;//判断红球命中了几个,开始统计for (int i = 0; i < userNumbers.length - 1; i++) {for (int j = 0; j < luckNumbers.length - 1; j++) {if (userNumbers[i] == luckNumbers[j]) {//红球命中,redHitNumbers自加1redHitNumbers++;//到这里没必要继续判断了,可以跳出内部循环了break;}}}//判断蓝球命中个数blueHitNumbers = userNumbers[6] == luckNumbers[6] ? 1 : 0;//将中奖情况告诉用户System.out.println("中奖的号码是: ");printArray(luckNumbers);System.out.println("您投注的号码是: ");printArray(userNumbers);System.out.println("您命中的红球个数: " + redHitNumbers);System.out.println("您命中的蓝球个数: " + blueHitNumbers);//判断中奖情况if (blueHitNumbers + redHitNumbers > 0 && blueHitNumbers + redHitNumbers <= 3) {System.out.println("恭喜你,获得5元小奖!");}else if (blueHitNumbers + redHitNumbers == 4) {System.out.println("恭喜你,获得10元小奖!");}else if (blueHitNumbers + redHitNumbers == 5) {System.out.println("恭喜你,获得200元!");}else if (blueHitNumbers == 1 && redHitNumbers == 5) {System.out.println("恭喜你,获得3000元的大奖!");}else if (blueHitNumbers == 0 && redHitNumbers == 6) {System.out.println("恭喜你,获得最高500万的超级大奖!");}else if (blueHitNumbers + redHitNumbers == 7) {System.out.println("恭喜你,获得最高1000万的巨奖!");}else {System.out.println("感谢您为福利事业作出的突出贡献!");}}
}