规则:
1、一注双色球由7个球组成,6个红球,1个蓝球
2、红球的范围: [1, 33], 蓝球的范围: [1, 16]
3、红球不允许重复
4、一注双色球中,红球需要是升序排序的
有两种选择方式,一是自己选择双色球号码,另一种是机器自动生成双色球号码。
-
输入一个自己选择的双色球(6个红球,1个蓝球)
-
随机生成一注双色球(可用于机选号码与中奖号码的生成)
-
对比两注双色球,计算中奖金额
双色球中奖规则与奖金
下边是代码实现:
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);
}
}