投注号码由6个红色号码和1个蓝球号码组成。红色球号码从1-33中选择;蓝色球号码从1-16中选择。
案例分析: 1.随机一组中奖号码返回中奖号码由6个红球和1个蓝球组成(注意:6个红球要求不能重复)。
可以定义方法用于返回一组中奖号码(7个数据),返回的形式是一个整型数组。
定义一个方法,该方法可以录入用户输入的6个红球和1个蓝球号码。
该方法最终需要返回一个数组,数组中就是用户录入的号码(7位)。
定义一个方法,可以接收中奖号码的数组,用户选号的数组。
根据命中的红球和蓝球数判断最终的中奖情况并输出详情和中奖金额
定义一个方法,随机一组中奖号码返回
public static int[] createLuckNumbers() {
//a.定义一个动态初始化数组,存储7个数字
int[] numbers = new int[7];
//b.遍历数组,为每一个位置生成对应的号码。(注意:遍历前6个位置,生成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 ====> (0-32) + 1
//c.注意:必须判断当前随机的这个号码之前是否出现过,出现过要重新随机一个,直到不重复为止,才可以存入数组中去
//定义一个flag变量,默认认为data是没有重复的
boolean flag = true;
for (int j = 0; j < i; j++) {
if (numbers[i] == data) {
//data当前这个数据之前出现过,不能用
flag = false;
break;
}
}
if (flag) {
//data这个数据之前没有出现过,可以使用
numbers[i] = data;
break;
}
}
}
//d.为第7个位置生成一个1-16的号码作为蓝球号码
numbers[numbers.length - 1] = r.nextInt(16) + 1;
return numbers;
}
让用户输入一组双色球号码
public static int[] userInputNumbers() {
//a.定义一个数组存储7个号码
int[] numbers = new int[7];
//b.让用户录入6个红球号码
Scanner sc = new Scanner(System.in);
for (int i = 0; i < numbers.length - 1; i++) {
System.out.println("请输入第" + (i + 1) + "个红球号码(1 - 33,要求不重复):");
int data = sc.nextInt();
//c.把当前录入的数据存入到数组中去
numbers[i] = data;
}
//d.单独录入一个蓝球号码
System.out.println("请您输入蓝球号码(1-16):");
numbers[numbers.length - 1] = sc.nextInt();
return numbers;
}
判断中奖情况
public static void judge(int[] luckNumbers, int[] userNumbers) {
//判断是否中奖了
//a.定义两个变量分别存储红球命中的个数,以及蓝球命中的个数
int redHitNumbers = 0;
int blueHitNumbers = 0;
//b.判断红球命中了几个
for (int i = 0; i < userNumbers.length - 1; i++) {
for (int j = 0; j < luckNumbers.length - 1; j++) {
//每次找到了相等的,意味着当前号码命中了
if (userNumbers[i] == luckNumbers[j]) {
redHitNumbers ++;
break;
}
}
}
//c.判断蓝球是否命中
blueHitNumbers = userNumbers[userNumbers.length - 1] == luckNumbers[luckNumbers.length - 1] ? 1 : 0;
System.out.println("中奖号码是:");
printArray(luckNumbers);
System.out.println("您投注的号码是:");
printArray(userNumbers);
System.out.println("您命中了" + redHitNumbers + "个红球");
System.out.println("您命中了" + blueHitNumbers + "个蓝球");
//d.判断中奖情况
if (blueHitNumbers == 1 && redHitNumbers < 3) {
System.out.println("恭喜您,中了5元小奖!");
}else if (blueHitNumbers == 1 && redHitNumbers == 3 || blueHitNumbers == 0 && redHitNumbers == 4) {
System.out.println("恭喜您,中了10元小奖!");
}else if (blueHitNumbers == 1 && redHitNumbers == 4 || blueHitNumbers == 0 && 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 == 1 && redHitNumbers == 6) {
System.out.println("恭喜您,中了1000万超级大奖!");
}else {
System.out.println("感谢您为福利事业做出的突出贡献!!");
}
}
在主方法中依次调用自定义好的方法
public class Demo7 {
public static void main(String[] args) {
//1.随机6个红球号码(1-33不能重复),随机一个蓝球号码(1-16),可以采用数组装起来作为中奖号码。
int[] luckNumbers = createLuckNumbers();
//printArray(luckNumbers);
//2.调用一个方法让用户输入7个号码,作为用户选号
int[] userNumbers = userInputNumbers();
//printArray(userNumbers);
//3.判断中奖情况
judge(luckNumbers, userNumbers);
}
完整代码展示:
import java.util.Random;
import java.util.Scanner;
public class Demo7 {
public static void main(String[] args) {
//1.随机6个红球号码(1-33不能重复),随机一个蓝球号码(1-16),可以采用数组装起来作为中奖号码。
int[] luckNumbers = createLuckNumbers();
//printArray(luckNumbers);
//2.调用一个方法让用户输入7个号码,作为用户选号
int[] userNumbers = userInputNumbers();
//printArray(userNumbers);
//3.判断中奖情况
judge(luckNumbers, userNumbers);
}
public static void judge(int[] luckNumbers, int[] userNumbers) {
//判断是否中奖了
//a.定义两个变量分别存储红球命中的个数,以及蓝球命中的个数
int redHitNumbers = 0;
int blueHitNumbers = 0;
//b.判断红球命中了几个
for (int i = 0; i < userNumbers.length - 1; i++) {
for (int j = 0; j < luckNumbers.length - 1; j++) {
//每次找到了相等的,意味着当前号码命中了
if (userNumbers[i] == luckNumbers[j]) {
redHitNumbers ++;
break;
}
}
}
//c.判断蓝球是否命中
blueHitNumbers = userNumbers[userNumbers.length - 1] == luckNumbers[luckNumbers.length - 1] ? 1 : 0;
System.out.println("中奖号码是:");
printArray(luckNumbers);
System.out.println("您投注的号码是:");
printArray(userNumbers);
System.out.println("您命中了" + redHitNumbers + "个红球");
System.out.println("您命中了" + blueHitNumbers + "个蓝球");
//d.判断中奖情况
if (blueHitNumbers == 1 && redHitNumbers < 3) {
System.out.println("恭喜您,中了5元小奖!");
}else if (blueHitNumbers == 1 && redHitNumbers == 3 || blueHitNumbers == 0 && redHitNumbers == 4) {
System.out.println("恭喜您,中了10元小奖!");
}else if (blueHitNumbers == 1 && redHitNumbers == 4 || blueHitNumbers == 0 && 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 == 1 && redHitNumbers == 6) {
System.out.println("恭喜您,中了1000万超级大奖!");
}else {
System.out.println("感谢您为福利事业做出的突出贡献!!");
}
}
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[] userInputNumbers() {
//a.定义一个数组存储7个号码
int[] numbers = new int[7];
//b.让用户录入6个红球号码
Scanner sc = new Scanner(System.in);
for (int i = 0; i < numbers.length - 1; i++) {
System.out.println("请输入第" + (i + 1) + "个红球号码(1 - 33,要求不重复):");
int data = sc.nextInt();
//c.把当前录入的数据存入到数组中去
numbers[i] = data;
}
//d.单独录入一个蓝球号码
System.out.println("请您输入蓝球号码(1-16):");
numbers[numbers.length - 1] = sc.nextInt();
return numbers;
}
public static int[] createLuckNumbers() {
//a.定义一个动态初始化数组,存储7个数字
int[] numbers = new int[7];
//b.遍历数组,为每一个位置生成对应的号码。(注意:遍历前6个位置,生成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 ====> (0-32) + 1
//c.注意:必须判断当前随机的这个号码之前是否出现过,出现过要重新随机一个,直到不重复为止,才可以存入数组中去
//定义一个flag变量,默认认为data是没有重复的
boolean flag = true;
for (int j = 0; j < i; j++) {
if (numbers[i] == data) {
//data当前这个数据之前出现过,不能用
flag = false;
break;
}
}
if (flag) {
//data这个数据之前没有出现过,可以使用
numbers[i] = data;
break;
}
}
}
//d.为第7个位置生成一个1-16的号码作为蓝球号码
numbers[numbers.length - 1] = r.nextInt(16) + 1;
return numbers;
}
}
运行结果展示:
总结:
1.在随机一组中奖号码时要注意:
6个红球要求不能重复,随机6个红球号码采用数组存储,随机1个蓝球号码采用变量存储。
2.关于如何统计红球的命中数量:
遍历用户的每个选号,然后遍历中奖号码的数组。
看当前选号是否在中奖号码中存在,存在则命中数量加1。



