java案例:模拟双色球中奖

 

1、双色球系统-业务分析、随机生成一组中奖号码 

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

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

                如何去保证随机的6个中奖的红球号码不重复?

                        每次随机一个红球号码后去数组中判断是否存在。

                        存在需要重新随机一个数字直到不重复为止。

2、双色球系统-用户输入一组双色球号码

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

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

3、模拟双色球系统-判断中奖情况

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

根据命中红球数和篮球数判断最终的中奖情况并输出详情和中奖金额。
如何去统计红球的命中数量?
遍历用户的每个选号,然后遍历中奖号码的数组。
看当前选号是否在中奖号码中存在,存在则命中数量加 1

完整代码: 

package com.hmy.exer;


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

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

//     2、调用一个方法让用户输入七个号码作为用户选号
        int[] userNumbers = userInputNumbers();
//        printArray(userNumbers);
        judge(luckNumbers ,userNumbers);

    }


    public  static int[] createLuckNumber(){
//        a.定义一个动态初始化的数组,存储七个数字
        int[]  numers = new int[7];
//        b.遍历数组,为每个位置生成对应的号码(注意 , 遍历前六个位置,生成六个不重复的红球号码,范围是(1-33)
        Random r = new Random();
        for (int i = 0; i < numers.length; i++) {
            while (true){
                int data =r.nextInt(33)+1;
//      c、注意,必须判断当前随机的号码有没有重复,若重复,则必须要重新随机一个号码 直到不重复为止,才可以存到数组中去

//                定义一个flag变量,默认data没有重复
                boolean flag =true;
                for (int j = 0; j <i; j++) {
                    if(numers[j]==data){
//                        data这个数据之前出现过,不能用
                        flag=false;
                        break;
                    }
                }
                if(flag){
//                    说明data这个数据之前没有出现过 可以使用 并并把它装到数组中去
                    numers[i]=data;
                    break;
                }
            }
        }
//        d. 为第七个位置生成一个1-16的号码作为蓝球号码
        numers[numers.length-1]= r.nextInt(16)+1;
        return numers;
    }



    public  static  int[] userInputNumbers(){
//        a.定义一个数组存储七个号码
        int[] numers =new int [7];
//        b.让用户录入六个红球号码
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < numers.length-1 ; i++) {
            System.out.println("请您输入第"+(i+1)+"个红球号码(1-33)");
            int data = sc.nextInt();
//            c、把当前录入的数据存到数组中去
            numers[i] = data;
        }
        System.out.println("请您输入一个蓝球号码(1-16)");
        numers[numers.length-1]=sc.nextInt();
        return  numers;
    }



    public  static  void  printArray(int[] arr){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i==arr.length-1 ?  arr[i]: arr[i]+",");
        }
        System.out.println("]");
    }


    public  static  void  judge(int[] luckyNumbers ,  int[] userNumbers){
//        判断是否中奖了
//        1、定义两个变量分别存储红球命中个数与篮球命中个数。
        int redHitNumbers = 0;
        int blueHitNumbers = 0;

//        2、判断红球命中个数,开始统计
        for (int i = 0; i < userNumbers.length-1; i++) {
            for (int j = 0; j < luckyNumbers.length-1; j++) {
//                每次找到相等的就意味着当前号码命中了
                if (userNumbers[i]==luckyNumbers[j]){
                    redHitNumbers++;
                    break;
                }
            }
        }

//        判断篮球号码是否命中
        blueHitNumbers= luckyNumbers[luckyNumbers.length-1] == userNumbers[userNumbers.length-1] ? 1:0;

        System.out.println("中奖号码是:");
        printArray(luckyNumbers);
        System.out.println("您选的号码是:");
        printArray( userNumbers);
        System.out.println("您命中了" +redHitNumbers +"个红球");
        System.out.println("您是否命中篮球:" + (blueHitNumbers==1? "是" : "否"));
//        判断中奖情况
        if(blueHitNumbers==1 && redHitNumbers<3){
            System.out.println("恭喜您中了五元");
        }else if ( blueHitNumbers ==1 && redHitNumbers==3 || blueHitNumbers==0 && redHitNumbers==4) {
            System.out.println("恭喜你中了十元");
        } else if ( blueHitNumbers ==1 && redHitNumbers==4 || blueHitNumbers==0 && redHitNumbers==5) {
            System.out.println("恭喜你中了两百元");
        } else if ( blueHitNumbers ==1 && redHitNumbers==5) {
            System.out.println("恭喜您中了三千元");
        } else if (blueHitNumbers ==0 && redHitNumbers==6) {
            System.out.println("恭喜您中了五百万");
        } else if (blueHitNumbers ==1 && redHitNumbers==6) {
            System.out.println("恭喜您中了一千万");
        }else {
            System.out.println("很遗憾,您没有中奖! 感谢您对福利事业做出的贡献!");
        }
    }

}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值