java,双色球系统(学习)

一、随机生成一组中奖号码

要求:投注号码由6个红色球和1个蓝色球号码组成。红色球号码从1-33中选择;蓝色球号码从1-16中选择。 中奖号码由6个红球和一个蓝球组成(6个红球要求不能重复)

使用方法:

1.定义一个动态初始化的数组,存储7个数字

 int[] numbers = new int[7];

2.遍历数组,为每个位置生成对应的号码。(注意:遍历前6个位置,生成6个不重复的红球号码,范围是1-33),在此期间需要判断当前随机的号码是否出现过,如果出现过则需要出现随机一个,直到不重复为止,才可以存入数组。

因此需要使用循环来对此进行判断,因为不知道需要循环多少次,所以使用死循环;

   //生成六个号码
    for (int i = 0; i <numbers.length-1 ; i++) {
            //用一个死循环为当前位置找出一个不重复的1-33之间的数字
            while(true) {
                //定义一个变量来记录随机生成的整数型
                int data = r.nextInt(33) + 1;
                //c:判断当前随机的号码是否出现过,若出现过要重新随机一个,直到不重复为止,才可以存入数组
                //定义一个flag,默认data没有重复
                boolean flag=true;
                //使用for循环查找在数组中已经录入的数字有无重复出现的数字,
                //如果有则将flag改为false
                for (int j = 0; j <i; j++) {
                    if (numbers[j]==data){
                        //data当前这个数据之前出现过,不能用
                        flag=false;
                        break;
                    }
                }
                //当flag为true时,数据可以存到numbers数组中去
                if(flag){
//                    data这个数据之前没有出现过,可以使用
                    numbers[i]=data;
                    break;
                }
            }
}

又因为不知道随机出现的数会不会与前面的数产生重复,所以需要一个flag来定义,若是重复的话,flag将其数据丢弃,并跳出循环,再次去随机一个数,直到出现的数与前面不重复为止。

当这些数全部不重复后,才可以存入到数组中去。此为红球号码的遍历

蓝球号码的遍历不需要思考重不重复,因为他只是占了七个数据中的一个数据,而且还可以和前面的红球号码重复。所以蓝球号码的遍历为:

 numbers[numbers.length-1]=r.nextInt(16)+1;

二、用户输入一组双色球号码

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

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;
    }

2.调用方法使用户输入号码

int[] UserNumbers=UserInputNumber();

三、判断中奖情况

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

定义两个变量分别存储红球命中个数和蓝球命中个数

        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++;
                    break;
                }
            }
        }

蓝球号码是否命中

 blueHitNumbers=LuckNumbers[6]==UserNumbers[6]?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("恭喜您,中了五元");
        }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("您没中奖");
        }

四、将上面几个方法调用到main方法里

         //1.随机6个红球号码(1-33,不能重复),随机一个蓝球号码(1-16),可以采用数组装起来作为中奖号码
        int[] LuckNumbers=createLuckNumber();

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

        //3.判断中奖情况
        juge(LuckNumbers,UserNumbers);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐小狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值