import java.util.Random;
import java.util.Scanner;
/**
* @author 南月
* @Date 2023/9/16&13:51
* 双色球系统的开发
* 方法中的return语句用于从当前方法中返回一个值,并且一旦执行return语句,方法的执行将立即终止,
* 不会继续执行方法中return语句之后的代码。这意味着在方法中使用return语句后,方法将不再执行剩余的代码。
* 动态初始化的数组长度等于数组的最大索引值+1
* 任务分离(填空式编程),一行一行的执行,量化思维,面向对象是计算机编程重要思维。
*/
public class TestSystemKaiFa {
public static void main(String[] args) {
//用于投注一组号码,并返回投注的号码
int[] numbers = touzhu();
printArr(numbers);
//系统生成一组号码,并返回中奖的号码
int[] numbers1=xitong();
printArr(numbers1);
//比较两组号码,判断中奖情况,返回中奖情况
bijiao(numbers,numbers1);
}
private static void bijiao(int[] numbers, int[] numbers1) {
//判断命中情况,量化思维
//红球命中数量
int redCount = 0;
//蓝球命中数量
int buleCount = 0;
//先处理简单的,蓝球只有一个
buleCount = numbers[6]==numbers1[6]?1:0;
//再处理复杂的
//判断数组前六个元素,相等的个数,用循环
//外循环取出选中的号码
for (int i = 0; i < numbers.length-1; i++) {
//内循环取出系统产生的号码,一一与外循环选中的号码做对比
for (int i1 = 0; i1 < numbers1.length; i1++) {
//记录相等个数
if(numbers[i]==numbers1[i1]){
redCount++;
//因为没有重复的号码,故直接直接break;避免多余的访问,造成性能的浪费。
break;
}
}
}
//判断中奖情况
if(redCount==6&&buleCount==1){
System.out.println("恭喜您命中6个红球,1个蓝球,中奖1000万!");
}else if(redCount==6&&buleCount==0){
System.out.println("恭喜您命中6个红球,0个蓝球,中奖500万!");
}else if(redCount==5&&buleCount==1){
System.out.println("恭喜您命中5个红球,1个蓝球,中奖3000元!");
}else if(redCount==4&&buleCount==1){
System.out.println("恭喜您命中4个红球,1个蓝球,中奖200元!");
}else if(redCount==5&&buleCount==0){
System.out.println("恭喜您命中5个红球,0个蓝球,中奖200元!");
}else if(redCount==4&&buleCount==0){
System.out.println("恭喜您命中4个红球,0个蓝球,中奖10元!");
}else if(redCount==3&&buleCount==1){
System.out.println("恭喜您命中3个红球,1个蓝球,中奖10元!");
}else if(buleCount==1){
System.out.println("恭喜您命中一颗蓝球,中奖5元!");
}else {
System.out.println("非常感谢您的支持,福彩的小姐姐欢迎您下次再来!");
}
}
private static int[] xitong() {
//用数组来存这个系统生成的号码
int[] numbers = new int[7];
//先生成红球号码
Random random = new Random();
for (int i=0;i<numbers.length;i++) {
while (true) {
int number = random.nextInt(33)+1;
//判断生成的号码是否已存在
if(!exist(number,numbers)){
numbers[i] =number;
break;
}
}
}
//在生成蓝球
numbers[6] = random.nextInt(16)+1;
return numbers;
}
private static void printArr(int[] numbers) {
//打印数组
System.out.println("================================================");
System.out.print("[");
for (int i = 0; i < numbers.length; i++) {
System.out.print((i==numbers.length-1)?numbers[i]:numbers[i]+",");
}
System.out.println("]");
System.out.println("=================================================");
}
//用于投注一组号码,并返回投注的号码
//号码用数组来存储
public static int[] touzhu(){
//号码共七位,6红+1蓝
int[] haoma = new int[7];
//红球和篮球分开处理
//先处理红球
//遍历数组的前6个元素
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < haoma.length-1; i++) {
//号码由用户自己输入,输入动作由一个死循环控制
//先输入红球
while (true) {
System.out.println("请输入您的第"+(i+1)+"个红球号码(1-33,不能重复):");
int number = scanner.nextInt();
//红球号码在1——33之间
if(number<1||number>33)
{
System.out.println("对不起您输入的红号码不在(1——33)之间,请重新输入:");
}else {
//去重
if (!exist(number,haoma)) {
haoma[i]=number;
break;
}
}
}
}
while (true) {
System.out.println("请输入您的蓝球号码(1—16):");
int number1 = scanner.nextInt();
if(number1<1||number1>16)
{
System.out.println("对不起,您输入错误,请重新输入:");
}else {
haoma[6]=number1;
break;
}
}
return haoma;
}
private static boolean exist(int number, int[] haoma) {
for (int i = 0; i < haoma.length-1; i++) {
if(haoma[i]==0){
break;
}
if(number==haoma[i]){
return true;
// java中return语句返回值后,方法不在执行
}
}
return false;
}
}