双色球系统开发

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) +1
                if (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自加1
                    redHitNumbers++;
                    //到这里没必要继续判断了,可以跳出内部循环了
                    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("感谢您为福利事业作出的突出贡献!");
        }
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值