Java实现双色球

题目介绍

1.玩法介绍

“双色球”每注投注号码由 6 个红色球号码1 个蓝色球号码组成。红色球号码从 1~33 中选择,蓝色球号码从 1~16 中选择。 球的数字匹配数量和颜色决定了是否中奖。

2.中奖规则

在这里插入图片描述

3.要求

1.生成本期双色球中奖号码。(注意:1.生成的红球随机有序且不可重复 2.蓝球和红球的随机范围不同且篮球允许和红球重复)

2.用户两种产生数据方式
(1)自动生成。(机选)
(2)通过控制台输入竞猜号码。(自选)

3.记录红球、蓝球竞猜正确球的数量,并根据获奖条件输出竞猜结果和本期双色球号码。

分析

  1. 用数组来代表双色球的选号,数组大小为7,前6个元素表示红色球的号码,最后一个元素表示蓝色球的号码。
		int[] array = new int[7];    // 存储双色球的号码 前6个为红球 最后一个为蓝球

这里定义两个数组,一个表示用户的双色球号码,另一个表示中奖的双色球号码。

		int[] array = new int[7];    // 存储双色球的号码 前6个为红球 最后一个为蓝球
		int[] result;    // 中奖的双色球号码
  1. 定义两个计数器,分别记录红球,蓝球中奖的个数。
		int countRed = 0;    // 红色球中奖的个数
        int countBlue = 0;    // 蓝色球中奖个数片
  1. 利用switch进行分支操作,实现机选和自选
  2. 机选号码和中奖号码的生成用随机数自动生成,这里将部分重复内容写在了一个函数中。
    // 随机生成双色球方法
    public static int[] randomArray() {
        int[] array = new int[7];
        // 产生6个不同的随机数 表示6个红球
        for (int i = 0; i < 6; i++) {
            boolean flag = true;    // 定义一个标志,判断红球号码是否重复
            int randomNum = (int)(Math.random() * 33 + 1);    // 随机产生一个红球号码(1~33)
            // 遍历数组 只有红球要求号码各不相同故只需要遍历前6个号码
            for (int j = 0; j < 6; j++) {
                if (randomNum == array[j]) {    // 将数组中所有的号和新产生的随机号码比较
                    i--;    // 将i回退
                    flag = false;    // 表示重复
                    break;
                }
            }
            if (flag) {    // 若不重复
                array[i] = randomNum;    // 将随机产生的红球号码存放在array中
            }
        }
        array[6] = (int)(Math.random() * 16 + 1);    // 随机生成蓝球号码 1~16
        return array;
    }
  1. 红球需要升序排序,所以只需要对数组中前6个元素(共7个元素)进行排序即可。
    (可以使用 Arrays. sort(int[] a, int fromIndex, int toIndex) 方法)
    a - 要排序的数组
    fromIndex - 要排序的第一个元素的索引(包括)
    toIndex - 要排序的最后一个元素的索引(不包括)
    这里用的是冒泡排序
	// 排序(从小到大) 冒泡
    public static int[] sort (int[] a) {
        // 只对前6个号码进行排序,故此处为a.length-2
        for (int i = 0; i < a.length-2; i++) {
            for (int j = 0; j < a.length-i-2; j++) {
                if (a[j] > a[j+1]) {
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        return a;
    }

活不多说上代码。

源代码

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("============欢迎进入双色球机选系统(本期奖金500万)============");
        System.out.println("1:机选双色球\t\t\t2:自选双色球");
        int n = sc.nextInt();
        int[] array = new int[7];    // 存储双色球的号码 前6个为红球 最后一个为蓝球
        int[] result;    // 中奖的双色球号码
        int countRed = 0;    // 红色球中奖的个数
        int countBlue = 0;    // 蓝色球中奖个数
        switch(n) {
            case 1:    // 机选双色球
                // 随机生成双色球号码
                array = randomArray();
                // 对生成的红色球号码进行排序
                sort(array);
                // 输出机选结果
                System.out.print("机选红球号码:[");
                for (int i = 0; i < 6; i++) {
                    if (i != 5) {
                        System.out.print(array[i] + ", ");
                    } else {
                        System.out.println(array[i] + "]");
                    }
                }
                System.out.println("机选蓝球号码:[" + array[6] + "]");
                break;
            case 2:    // 自选双色球
                System.out.println("自选");
                System.out.println("请输入您选择的红球号码(1~33)");
                for (int i = 0; i < 6; i++) {
                    System.out.print("请输入第" + (i+1) + "个红球的号码:");
                    array[i] = sc.nextInt();
                }
                System.out.print("请输入蓝色球的号码(1~16):");
                array[6] = sc.nextInt();
                // 红色球排序
                sort(array);
                break;
            default:
                System.out.println("输入错误!");
                System.exit(0);
        }
        System.out.println("========================正在开奖请等待========================");
        // 随机生成中奖的号码
        result = randomArray();
        // 对生成的红色球中奖号码进行排序
        sort(result);
        // 输出中奖的号码
        System.out.print("本期中奖红球号码:[");
        for (int i = 0; i < 6; i++) {
            if (i != 5) {
                System.out.print(result[i] + ", ");
            } else {
                System.out.println(result[i] + "]");
            }
        }
        System.out.println("本期中奖蓝球号码:[" + result[6] + "]");
        // 统计红色球中奖个数
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                if (array[i] == result[j]) {
                    countRed++;
                }
            }
        }
        if (array[6] == result[6]) {    // 统计蓝色球中奖个数
            countBlue++;
        }
        System.out.println("选6+1中"+ countRed + "+" + countBlue);
        // 判断是否中奖
        if (countRed <= 3 && countBlue == 0) {
            System.out.println("很遗憾您没有中奖 ╭(╯^╰)╮");
        } else if (countRed < 3 && countBlue == 1) {
            System.out.println("恭喜您中奖:六等奖! 5块钱!");
        } else if ((countRed ==3 && countBlue == 1) || (countRed == 4 && countBlue == 0)) {
            System.out.println("恭喜您中奖:五等奖! 10块钱!!");
        } else if ((countRed == 4 && countBlue == 1) || (countRed == 5 && countBlue == 0)) {
            System.out.println("恭喜您中奖:四等奖! 200元!!!");
        } else if (countRed == 5 && countBlue == 1) {
            System.out.println("恭喜您中奖:三等奖! 3000元!!!!");
        } else if (countRed == 6 && countBlue == 0) {
            System.out.println("恭喜您中奖:二等奖! "+ 500*0.3 +"万元w(゚Д゚)w!!!!!");
        } else {
            System.out.println("恭喜您中奖:一等奖! 500万元 (^o^) / w(゚Д゚)w!!!!!");
        }
    }

    // 随机生成双色球方法
    public static int[] randomArray() {
        int[] array = new int[7];
        // 产生6个不同的随机数 表示6个红球
        for (int i = 0; i < 6; i++) {
            boolean flag = true;    // 定义一个标志,判断红球号码是否重复
            int randomNum = (int)(Math.random() * 33 + 1);    // 随机产生一个红球号码(1~33)
            // 遍历数组 只有红球要求号码各不相同故只需要遍历前6个号码
            for (int j = 0; j < 6; j++) {
                if (randomNum == array[j]) {    // 将数组中所有的号和新产生的随机号码比较
                    i--;    // 将i回退
                    flag = false;    // 表示重复
                    break;
                }
            }
            if (flag) {    // 若不重复
                array[i] = randomNum;    // 将随机产生的红球号码存放在array中
            }
        }
        array[6] = (int)(Math.random() * 16 + 1);    // 随机生成蓝球号码 1~16
        return array;
    }

    // 排序(从小到大) 冒泡
    public static int[] sort (int[] a) {
        // 只对前6个号码进行排序,故此处为a.length-2
        for (int i = 0; i < a.length-2; i++) {
            for (int j = 0; j < a.length-i-2; j++) {
                if (a[j] > a[j+1]) {
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        return a;
    }

总结

这是学习中的一个小案例,作者还在努力学习中,如有考虑不周,请各路大神批评指正,共同学习。

扩展

生成不相同的随机数且有序的要求,可以通过TreeSet来实现。

		Set<Integer> set = new TreeSet<Integer>();
        while (set.size() < 6) {
            set.add((int)(Math.random() * 33 +1));
        }
        System.out.println(set);
  • 16
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值