文章目录
- 一、需求
- 二、分析
- 三、代码
- 四、效果图
- 总结
- 如何保证随机的6个中奖的红球号码不重复。
- 如何统计红球命中数量
一、需求
1.随机生成一组中奖号码
2.用户输入一组双色球号码
3.判断中奖情况
4.中奖号码由6个红球(1-33)和1个蓝球(1-16)组成(6个红球不能重复)
二、分析
1.createLuckNumbers(){…} 随机生成一组中奖号码返回
可以定义方法用于返回一组中奖号码(7个数据),返回的形式是一个整型数组
userInputNumbers(){…} 用户输入一组号码
2.定义一个方法,该方法可以录入用户输入的6个红球和1个蓝球号码
该方法最终返回一个数组,数组中就是用户录入的号码(7个)
3.judge(int[] luckNumbers,int[] userNumbers){…} 传入两组号码判断用户中奖情况
三、代码
import java.util.Random;
import java.util.Scanner;
/**
* 模拟双色球
* 业务分析、随机生成一组中奖号码
* 用户输入一组双色球号码
* 判断中奖情况
* 中奖号码由6个红球和1个篮球组成(注意:6个红球要求不能重复)
*/
public class CaseDemo7 {
/**
* 分析:
* createLuckNumbers(){...} 随机生成一组中奖号码返回
* 可以定义方法用于返回一组中奖号码(7个数据),返回的形式是一个整型数组
* userInputNumbers(){...} 用户输入一组号码
* 定义一个方法,该方法可以录入用户输入的6个红球和1个蓝球号码
* 该方法最终返回一个数组,数组中就是用户录入的号码(7个)
* judge(int[] luckNumbers,int[] userNumbers){...} 传入两组号码判断用户中奖情况
*/
public static void main(String[] args) {
//1.随机6个红球号码(1-33,不能重复),随机一个蓝球号码(1-16),可以采用数组装起来作为中奖号码
int[] luckNumbers = createLuckNumbers();
//2. 调用一个方法让用户输入7个号码,作为用户选号
int[] userInputNumbers = userInputNumbers();
System.out.println("您购买的号码是:");
print(userInputNumbers);
System.out.println("中奖号码为:");
print(luckNumbers);
//3.判断是否中奖
judge(luckNumbers, userInputNumbers);
}
//生成一组中奖号码
public static int[] createLuckNumbers() {
//a.定义一个动态初始化的数组,存储7个数字
int[] numbers = new int[7];
//b.遍历数组,为每个位置生成对应号码,遍历到第六个位置,第七个为蓝球号码需要单独生成
//(6个红球号码不能重复)
Random r = new Random();
for (int i = 0; i < numbers.length - 1; i++) {
//当不重复的时候再退出死循环
while (true) {
int data = r.nextInt(33) + 1;//1-33 (0-32)+1
//c.判断当前随机生成号码是否出现过,如果出现过需要重新随机一个,知道不重复为止才能存入数组
/**
* (当前生成的随机数需要与已经存入的做比较是否重复,已经存入的i代表位置) 比如已经存入2个,在存入
* 第三个的时候需要判断 0,1 是否重复 相当于 i=3时,j = 1 、2
*/
boolean flag = true;
for (int j = 0; j < i; j++) {
//data值与之前的值重复,data需要重新赋值
if (numbers[j] == data) {
//跳出本次判断重复循环,重新生成一个
flag = false;
break;
}
}
//如果判断没有重复,说明flag还是true 跳出死循环
if (flag) {
numbers[i] = data;
break;
}
}
}
// d.为第七个位置生成(1-16)作为蓝球号码
numbers[numbers.length - 1] = r.nextInt(16) + 1;
return numbers;
}
//用户选号
public static int[] userInputNumbers() {
// a.定义一个数组存储7个号码
int[] userNumbers = new int[7];
Scanner sc = new Scanner(System.in);
// b.让用户输入6个红球号码
for (int i = 0; i < userNumbers.length - 1; i++) {
System.out.println("请您输入第" + (i + 1) + "个红球号码(1-33)不能重复:");
int data = sc.nextInt();
//c.把当前录入的数据存入数组
userNumbers[i] = data;
}
System.out.println("请输入第7个蓝球号的号码(1-16):");
userNumbers[userNumbers.length - 1] = sc.nextInt();
return userNumbers;
}
//判断中奖情况
public static void judge(int[] luckNumbers, int[] userNumbers) {
//a.定义两个变量定义红蓝球中的个数
int countRed = 0;
int countBlue = 0;
//b.统计红球猜中个数
for (int i = 0; i < luckNumbers.length - 1; i++) {
if (luckNumbers[i] == userNumbers[i]) {
countRed++;
}
}
//c.统计蓝球猜中没有
if (luckNumbers[luckNumbers.length - 1] == userNumbers[userNumbers.length - 1]) {
countBlue++;
}
System.out.println("红球:" + countRed);
System.out.println("蓝球:" + countBlue);
if (countRed == 6 && countBlue == 1) {
System.out.println("恭喜您中了1000万!");
} else if (countRed == 6 && countBlue == 0) {
System.out.println("恭喜您中了500万!");
} else if (countRed == 5 && (countBlue == 1 || countBlue == 0)) {
System.out.println("恭喜您中了3000元!");
} else if (countRed == 4 && (countBlue == 1 || countBlue == 0)) {
System.out.println("恭喜您中了200元!");
} else if ((countRed == 2 || countRed == 3) && countBlue == 1) {
System.out.println("恭喜您中了10元!");
} else if ((countRed == 1 && countBlue == 1) || countBlue == 1) {
System.out.println("恭喜您中了5元!");
} else {
System.out.println("很遗憾!您没有中奖!");
}
}
//打印数组
public static void print(int[] numbers) {
for (int i = 0; i < numbers.length; i++) {
System.out.print(i != numbers.length - 1 ? numbers[i] + " " : numbers[i]+"\n");
}
}
}
四、效果图
总结
如何保证随机的6个中奖的红球号码不重复。
1.每次随机一个红球号码后去数组中判断是否存在。
2.存在需要重新生成一个数字直到不重复位置(while循环+flag解决)。
如何统计红球命中数量
1.遍历用户的每个选号,然后遍历中奖号码的数组
2.看当前选号是否在中奖号码中存在,存在则count++