双色球系统java实现**双色球的中奖匹配

规则:

1、一注双色球由7个球组成,6个红球,1个蓝球

2、红球的范围: [1, 33], 蓝球的范围: [1, 16]

3、红球不允许重复

4、一注双色球中,红球需要是升序排序的

有两种选择方式,一是自己选择双色球号码,另一种是机器自动生成双色球号码。

  1. 输入一个自己选择的双色球(6个红球,1个蓝球)

  2. 随机生成一注双色球(可用于机选号码与中奖号码的生成)

  3. 对比两注双色球,计算中奖金额

双色球中奖规则与奖金

双色球系统java实现**双色球的中奖匹配

下边是代码实现:

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

public class Ball {
    public static void main(String[] args) {
        Random random=new Random();//定义随机数生成
        long date1=System.currentTimeMillis();
   //     int red[]=new int[]{1,7,31,26,17,11};
        int red[]=createRandomArray();//随即生成一个红色球数组
       // int blue=7;
        int blue=random.nextInt(16)+1;
        int redInput[];
        int blueInput;
        System.out.println("请输入您的选择:");
        System.out.println("1.自选号码 2.机选号码");
        System.out.print("> ");
        Scanner scan=new Scanner(System.in);
        int chance=scan.nextInt();
        switch (chance){
            case 1:
                System.out.println("请输入您要选择的号码(红球[1,33]):");
                System.out.print("> ");
                redInput=createRandomArray();
                for(int i=0;i<6;i++)
                    redInput[i]=scan.nextInt();
                System.out.println("请输入您要选择的号码(蓝球[1,16]):");
                System.out.print("> ");
                blueInput=scan.nextInt();
                matching(red,redInput,blue,blueInput);
                break;
            case 2:
                //random.nextInt(num),产生的数范围是[0,num),因此加1即可得到[1,num+1)
                redInput=createRandomArray();
             //   for(int i=0;i<6;i++)
              //      redInput[i]=random.nextInt(33)+1;
                blueInput=random.nextInt(16)+1;
              //  printArray(redInput);
             //   System.out.println("blue="+blueInput);
                matching(red,redInput,blue,blueInput);
                break;
            default:
                System.out.println("输入错误,请重新输入");
                break;
        }
        long date2=System.currentTimeMillis();
       // System.out.println("系统运行时间"+(date2-date1)+"ms");

    }
    //生成随机数组.
    public static int[] createRandomArray(){
        Random random=new Random();
        int[] array=new int[6];
        for(int i=0;i<6;i++)
            array[i]=random.nextInt(33)+1;
        return array;
    }
    //定义枚举类型,用来记录奖项的级别和奖金。
    public enum reward{
        一等奖(1,10000000),
        二等奖(2,5000000),
        三等奖(3,3000),
        四等奖(4,200),
        五等奖(5,10),
        六等奖(6,5),
        ;
        private int level;
        private int rewardingMoney;

        public int getLevel() {
            return level;
        }

        public void setLevel(int level) {
            this.level = level;
        }

        public int getRewardingMoney() {
            return rewardingMoney;
        }

        public void setRewardingMoney(int rewardingMoney) {
            this.rewardingMoney = rewardingMoney;
        }

        reward(int i, int i1) {
            this.level=i;
            this.rewardingMoney=i1;
        }
    };
    //打印数组
    public static void printArray(int[] array){
        for(int i:array)
            System.out.print(i+" ");
        System.out.println();
    }
    //交换数值
    public static void swap(int[] a,int i,int j){
        int temp;
        temp=a[j];
        a[j]=a[i];
        a[i]=temp;
    }
    //直接插入排序
    public static void insertSort(int []a){
        int j;
        for(int i=1;i<a.length;i++){
            j=i;
            while(j>0 && a[j]<a[j-1]){
                swap(a,j,j-1);
                j--;
            }
        }
    }
    //匹配算法实现一:先把两个数组合并,在排序,查找重复元素
    public static int arrayMatching(int []red,int[] redInput){
        int redCount=0;
        int []mergeArray=new int[red.length+redInput.length];
        int i;
        for(i=0;i<red.length;i++)
            mergeArray[i]=red[i];
        for(i=0;i<redInput.length;i++)
            mergeArray[i+red.length]=redInput[i];
        insertSort(mergeArray);
        //看看数组中有多少重复的元素,即匹配数量有多少
        for(int j=0;j<mergeArray.length-1;j++)
            if(mergeArray[j]==mergeArray[j+1])
                redCount++;
        return redCount;
    }
    //匹配算法实现二:先排序,在用归并算法合并,查找重复元素。

    //拼接字符串,将数组拼接成指定样式的字符串。
    public static String jointArray(int []array){
        String str="";
        for(int i=0;i<array.length;i++){
            if(array[i]/10==0)
                str+="0"+array[i]+",";
            else
                str+=array[i]+" ";
        }
        return str;
    }
    //中奖匹配
    public static void matching(int[] red,int []redInput,int blue,int blueInput){
        insertSort(red);
        insertSort(redInput);
        int redCount=0;//用来记录红色球匹配数量
        int blueCount=0;//用来记录蓝色球是否匹配
        String inputRed="您选择的号码是:红球:";
        inputRed+=jointArray(redInput);
        inputRed+=" 蓝球:"+blueInput;
        System.out.println(inputRed);
        String str="中奖号码是:红球:";
        str+=jointArray(red);
        str+=" 蓝球:"+blue+"\n";
        //匹配算法实现
        redCount=arrayMatching(red,redInput);
      //  System.out.println(redCount);
        if(blue==blueInput)
            blueCount=1;
        //按照中奖规则,写了一大堆if else
        if(redCount==6&&blueCount==1)
            //str+=("恭喜您中了一等奖!奖金10000000元!");
            str+=("恭喜您中了"+reward.一等奖+"!奖金"+reward.一等奖.getRewardingMoney()+"元!");
        else if(redCount==6&&blueCount==0)
            str+="恭喜您中了"+reward.二等奖+"!奖金"+reward.二等奖.getRewardingMoney()+"元!";
        else if(redCount==5&&blueCount==1)
            str+="恭喜您中了"+reward.三等奖+"!奖金"+reward.三等奖.getRewardingMoney()+"元!";
        else if(redCount==5&&blueCount==0||redCount==4&&blueCount==1)
            str+="恭喜您中了"+reward.四等奖+"!奖金"+reward.四等奖.getRewardingMoney()+"元!";
        else if(redCount==4&&blueCount==0||redCount==3&&blueCount==1)
            str+="恭喜您中了"+reward.五等奖+"!奖金"+reward.五等奖.getRewardingMoney()+"元!";
        else if(redCount==2&&blueCount==1||redCount==1&&blueCount==1||redCount==0&&blueCount==1)
            str+="恭喜您中了"+reward.六等奖+"!奖金"+reward.六等奖.getRewardingMoney()+"元!";
        else
            str+="谢谢惠顾!";
        System.out.println(str);
    }
}