JavaSE -双色球案例

彩票玩法说明:
双色球投注区分为红球号码区和蓝球号码区,红球号码范围为1~33,蓝球号码范围为1~16。从33个红球中随机6个号码作为中奖号码,从16个蓝球中随机1个号码作为中奖号码,总共7个中奖号码。

        这个案例中需要定义很多种方法,比如怎么随机选红球,蓝球,用户如何投注,如何将投注号码与中奖号码相匹配得出最后中了多少奖金。

定义用户投注号码的方法

能实现重复输出得益于死循环

因为有很多的限制条件,所以分支结构错综复杂

public static int[] userNumber (){
        int [] numbers = new int[7] ;
        //有六个红球,一个蓝球,分别处理
        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < numbers.length-1 ; i++) {
            while (true) {
                System.out.println("请输入第"+(i+1)+"个红球的号码");
                int number = sc.nextInt();
                if(number<1||number>33){
                    System.out.println("对不起,输入的红球号码不在1-33中");
                }else{
                    if(panD(numbers,number)){
                        System.out.println("对不起,号码重复");
                    }else{
                        numbers[i]=number;
                        break;
                    }
                }
            }
        }
        while (true) {
            System.out.println("请输入最后一个蓝球号码(1-16)");
            int number = sc.nextInt();
            if(number<1||number>16){
                System.out.println("对不起号码不对");
            }else{
                numbers[6] = number;
                break;
            }
        }
        return numbers;
    }

 

判断红球号码是否和之前的重复

因为涉及多个红球,双色球规则不允许出现重复的红球,所以需要处理

public static boolean panD (int [] numbers,int number){       //判断红球号码是否和之前的重复
        for (int i = 0; i <numbers.length ; i++) {
            if(numbers[i]==number){
                return true;
            }
        }
        return false;
    }           

        用户投注号码的功能就基本上实现了,接下来是随机生成中奖号码

设计一个方法,随机一组中奖号码

这个方法的分支条件中,也用到了判断红球是否重复的方法

public static int[] correctNumber (){
        Random r = new Random();
        int [] cNumber = new int[7];

        for (int i = 0; i < cNumber.length-1; i++) {
            while (true) {
                int n = r.nextInt(33)+1;
                if(panD(cNumber,n)){             //利用方法判断重复

                }else{
                    cNumber[i] = n;
                    break;
                }
            }
            //cNumber[i] = n;
        }
        int n2= r.nextInt(16)+1;
        cNumber[6] = n2;

        return cNumber;
    }

投注号码与中奖号码对照是否中奖

利用循环遍历实现对照,最后根据规则添加各种中奖的分支进行判断

 public static void judge(int []userNumber,int []correctNumber) {
        int redCount = 0;            //用来记录红篮球命中情况
        int blueCount = 0;

        for (int i = 0; i < userNumber.length - 1; i++) {

            for (int i1 = 0; i1 < correctNumber.length - 1; i1++) {
                if (userNumber[i] == correctNumber[i1]) {
                    redCount++;                              //红球每对一个,就加1
                    break;
                }
            }
        }
        blueCount = userNumber[6] == correctNumber[6] ? 1 : 0;//蓝球只有一个,只用关注1和0

        System.out.println("您命中的红球数量为" + redCount);
        System.out.println("您命中的蓝球数量为" + blueCount);

        //判断中奖详情
        if (redCount == 6 && blueCount == 1) {
            System.out.println("中奖1000万");
        } else if (redCount == 6 && blueCount == 0) {
            System.out.println("中奖500万");
        } else if (redCount == 5 && blueCount == 1) {
            System.out.println("中奖3000元");
        } else if (redCount == 5 && blueCount == 0||redCount == 4 && blueCount == 1) {
            System.out.println("中奖200元");
        }else if (redCount == 4 && blueCount == 0||redCount == 3 && blueCount == 1){
            System.out.println("中奖10元");
        }else if (redCount <3 && blueCount == 1){
            System.out.println("中奖5元");
        }else{
            System.out.println("没中奖");
        }
    }

最后完整代码奉上:

package com.casey;

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

//双色球

public class test4 {
    public static void main(String[] args) {
        int [] num = userNumber();                //把userNumber方法中的数据传递到【】num
        System.out.println("您投注的号码为:");
        zL(num);
        int [] num2 = correctNumber();
        System.out.println("本次中奖号码为:");
        zL(num2);
        judge(num,num2);
    }                           //main
    public static void  zL (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 int[] userNumber (){
        int [] numbers = new int[7] ;
        //有六个红球,一个蓝球,分别处理
        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < numbers.length-1 ; i++) {
            while (true) {
                System.out.println("请输入第"+(i+1)+"个红球的号码");
                int number = sc.nextInt();
                if(number<1||number>33){
                    System.out.println("对不起,输入的红球号码不在1-33中");
                }else{
                    if(panD(numbers,number)){
                        System.out.println("对不起,号码重复");
                    }else{
                        numbers[i]=number;
                        break;
                    }
                }
            }
        }
        while (true) {
            System.out.println("请输入最后一个蓝球号码(1-16)");
            int number = sc.nextInt();
            if(number<1||number>16){
                System.out.println("对不起号码不对");
            }else{
                numbers[6] = number;
                break;
            }
        }
        return numbers;
    }                                //用户投注号码
    public static boolean panD (int [] numbers,int number){             //判断红球号码是否和之前的重复
        for (int i = 0; i <numbers.length ; i++) {
            if(numbers[i]==number){
                return true;
            }
        }
        return false;
    }           //判断红球是否重复


    public static int[] correctNumber (){
        Random r = new Random();
        int [] cNumber = new int[7];

        for (int i = 0; i < cNumber.length-1; i++) {
            while (true) {
                int n = r.nextInt(33)+1;
                if(panD(cNumber,n)){                      //利用方法判断重复

                }else{
                    cNumber[i] = n;
                    break;
                }
            }
            //cNumber[i] = n;
        }
        int n2= r.nextInt(16)+1;
        cNumber[6] = n2;

        return cNumber;
    }                       //设计一个方法,随机一组中奖号码   //红球1-33,蓝球1-16

    public static void judge(int []userNumber,int []correctNumber) {
        int redCount = 0;            //用来记录红篮球命中情况
        int blueCount = 0;

        for (int i = 0; i < userNumber.length - 1; i++) {

            for (int i1 = 0; i1 < correctNumber.length - 1; i1++) {
                if (userNumber[i] == correctNumber[i1]) {
                    redCount++;                              //红球每对一个,就加1
                    break;
                }
            }
        }
        blueCount = userNumber[6] == correctNumber[6] ? 1 : 0;//蓝球只有一个,只用关注1和0

        System.out.println("您命中的红球数量为" + redCount);
        System.out.println("您命中的蓝球数量为" + blueCount);

        //判断中奖详情
        if (redCount == 6 && blueCount == 1) {
            System.out.println("中奖1000万");
        } else if (redCount == 6 && blueCount == 0) {
            System.out.println("中奖500万");
        } else if (redCount == 5 && blueCount == 1) {
            System.out.println("中奖3000元");
        } else if (redCount == 5 && blueCount == 0||redCount == 4 && blueCount == 1) {
            System.out.println("中奖200元");
        }else if (redCount == 4 && blueCount == 0||redCount == 3 && blueCount == 1){
            System.out.println("中奖10元");
        }else if (redCount <3 && blueCount == 1){
            System.out.println("中奖5元");
        }else{
            System.out.println("没中奖");
        }
    }       //相比较是否中奖
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

-Casey-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值