0
点赞
收藏
分享

微信扫一扫

Java基础案例-模拟双色球系统(注释详解)

unadlib 2022-04-13 阅读 76

随机一组中奖号码分析:

1. 中奖号码由6个红球和1个蓝球组成(注意:6个红球要求不能重复)

2.可以定义方法用于返回一组中奖号码(7个数据),返回的形式是一个整型数组.

用户输入一组双色球号码分析:

1.定义一个方法,该方法可以录入用户输入的6个红球和1个蓝球号码

2.该方法最终需要返回一个数组,数组中就是用户录入的号码(7位)

判断中奖情况分析:

1.定义一个方法,可以接收中奖号码的数组,用户选号的数组

2.根据命中的红球数和蓝球数判断最终的中奖情况并输出详情和中奖金额

代码展示:

import java.util.Random;
import java.util.Scanner;

public class Test7 {
    public static void main(String[] args) {
        //1.随机6个红球(1-33,不能重复),随机一个蓝球号码(1-16),可以采用数组装起来作为中奖号码
        int[] luckNumbers = createLuckNumber();

        //2.调用一个方法让用户输入7个号码,作为用户选号
       int[] userNumbers = userInputNumber();

       //3.判断中奖情况
        judge(luckNumbers,userNumbers);


    }

    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 void judge(int[] luckNumbers,int[] userNumbers){
        //判断是否中奖
        //先举个个例:luckNumbers = [12, 23, 8, 16, 15, 32,  9]
        //userNumbers = [23, 13, 18, 6, 8, 33,  10]
        //1.定义两个变量分别存储红球命中的个数,以及蓝球命中的个数
        int redHitNumbers = 0;
        int blueHitNumbers = 0;

        //2.判断红球命中了几个,开始统计
        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;
                }
            }
        }

        //判断蓝球号码是否命中
        blueHitNumbers = luckNumbers[luckNumbers.length - 1] == userNumbers[userNumbers.length - 1] ? 1 : 0;//三元运算符

        System.out.println("中奖号码是: ");
        printArray(luckNumbers);
        System.out.println("投注号码是: ");
        printArray(userNumbers);
        System.out.println("您命中的红球数: " + redHitNumbers);
        System.out.println("您命中的蓝球数: " + (blueHitNumbers == 1 ? "是" : "否"));

        //判断中奖情况
        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 int[] userInputNumber(){
        //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[6] = sc.nextInt();//蓝球号码只有一个,可以直接用索引接收数据
        return numbers;//返回数组
    }
    public static int[] createLuckNumber(){
        //a.定义一个动态初始化的数组,存储7个数字
        int[] numbers = new int[7];//[12,23,0,0,0,0,0]
        //                                  i
        Random r = new Random();
        //b.遍历数组,为每个位置生成对应的号码,(注意:遍历前6个位置,生成6个不重复的红球号码,范围是1-33)
        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
                boolean flag = true;//默认认为data是没有重复的
                for (int j = 0; j < i; j++) {
                    if(numbers[j] == data){
                        //data当前这个数据之前出现过,不能用
                        flag = false;
                        break;//调出死循环,执行最外围的for循环
                    }
                }
                if(flag){
                    //data这个数据之前没有出现过,可以使用了
                    numbers[i] = data;
                    break;//调出死循环,执行最外围的for循环
                }
            }
        }
        //d.为第7个未知生成一个1-16的号码作为蓝球号码
        numbers[numbers.length - 1] = r.nextInt(16) + 1;
        return numbers;
    }
}

运行截图:

 

举报

相关推荐

0 条评论