一,双色球中奖规则(均不分顺序):
一等奖:6个红球+1个蓝球号码完全相同-奖金波动9000000元左右
二等奖:6个红球+0个蓝球号码相同-奖金波动150000元左右
三等奖:5个红球+1个蓝球号码相同-3000元
四等奖:5个红球+0个蓝球或者4个红球+1个蓝球号码相同-200元
五等奖:4个红球+0个蓝球或者3个红球+1个蓝球号码相同-10元
六等奖:1个红球+1个蓝球或者2个红球+1个蓝球号码或者或者0个红球+1个蓝球号码相同-5元
二,双色球中奖号码生成规则:由福利彩票官方公开直播摇奖,
由1~33个红球随机产生6个中奖号码,
由1~16蓝色球随机产生一个中奖号码。
(要注意的是:模拟过程中每产生一个球都要从摇奖池里取出这个球:
第一个球概率为1/33,第二个球概率为1/32,第三个球概率为1/31,
第四个球概率为1/30,第五个球概率为1/29,第六个球概率为1/28
蓝球出球概率为1/16)
三,编程思路
1,通过随机数模拟出球过程,以生成7个中奖号码;
2,生成中奖号码后从小到大进行排序并打印;
3,用一组随机号码作为中奖号码,将生成的其他组号码与中奖号码一一对比,判断有几个相同数字以及是什么数字;
4,统计购买的一组数据中的中奖情况并打印
四,编程实施
1,用switch case先判断是通过人工选择,还是机选;通过Random语句生成随机数,并在每生成一个后就将该球去除,这样既保证了概率的正确性,又不存在号码重复的问题。通过删除数组中元素从而形成一个新的数组的方法实现,生成的数组需要返回以便调用,代码如下:
public static int[] RandomLottery() {
Random r1=new Random();
int x1=r1.nextInt(33)+1;//第1次出红球概率下的出球
int x2=r1.nextInt(32);//第2次出红球概率下的出球的下标
int x3=r1.nextInt(31);//第3次出红球概率下的出球的下标
int x4=r1.nextInt(30);//第4次出红球概率下的出球的下标
int x5=r1.nextInt(29);//第5次出红球概率下的出球的下标
int x6=r1.nextInt(28);//第6次出红球概率下的出球的下标
int x7=r1.nextInt(16)+1;//蓝色球一个随机数即可
int[] a1= {
1,2,3,4,5,6,7,8,9,10,11,12,13
,14,15,16,17,18,19,20,21,22,23,24,25
,26,27,28,29,30,31,32,33};
int[] a2=new int[a1.length-1];//出1个球后剩余的球
for(int i=0;i<=a2.length-1;i++) {
//把第一个球删去
if(i<x1-1) {
//前面加了一个1,此处要减一个1,否则有误
a2[i]=a1[i];
}else if(i>=x1-1) {
a2[i]=a1[i+1];
}
}//此时剩余32个球
int[] a3=new int[a2.length-1];//出2个球后剩余的球
for(int i=0;i<=a3.length-1;i++) {
//把第二个球删去
if(i<x2) {
a3[i]=a2[i];
}else if(i>=x2) {
a3[i]=a2[i+1];
}
}//此时剩余31个球
int[] a4=new int[a3.length-1];//出3个球后剩余的球
for(int i=0;i<=a4.length-1;i++) {
//把第二个球删去
if(i<x3) {
a4[i]=a3[i];
}else if(i>=x3) {
a4[i]=a3[i+1];
}
}//此时剩余30个球
int[] a5=new int[a4.length-1];//出4个球后剩余的球
for(int i=0;i<=a5.length-1;i++) {
//把第二个球删去
if(i<x4) {
a5[i]=a4[i];
}else if(i>=x4) {
a5[i]=a4[i+1];
}
}//此时剩余29个球
int[] a6=new int[a5.length-1];//出5个球后剩余的球
for(int i=0;i<=a6.length-1;i++) {
//把第二个球删去
if(i<x5) {
a6[i]=a5[i];
}else if(i>=x5) {
a6[i]=a5[i+1];
}
}//此时剩余28个球
int[] a7=new int[a6.length-1];//出6个球后剩余的球
for(int i=0;i<=a7.length-1;i++) {
//把第二个球删去
if(i<x6) {
a7[i]=a6[i];
}else if(i>=x6) {
a7[i]=a6[i+1];
}
}//此时剩余27个球
int [] lot=new int[7];//用于接受中奖号码
lot[0]=x1;lot[1]=a2[x2];lot[2]=a3[x3];
lot[3]=a4[x4];lot[4]=a5[x5];lot[5]=a6[x6];
sort(lot);//把数组排序
lot[6]=x7;//得到随机的七位双色球号码
// System.out.println(lot[0]+" "+lot[1]+
// " "+lot[2]+" "+lot[3]+" "+lot[4]+
// " "+lot[5]+"-"+lot[6]);
return lot;
}
2,将返回的7位数组按从小到的排序并且送入新的数组中,代码如下:
public static int[] sort (int[] a) {
//排序
// 只对前6个号码进行排序,故此处为
for (int i=0;i<a.length-2;i++) {
for (int j=0; j<a.length-i-2;j++) {
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
return a;
}
3,在主方法中先生成一组数作为中奖号码,随后与后续生成的机选或人工选的号进行一一对比,看相同的情况有多少,以此判断中奖情况:
int[] lot3=RandomLottery();
一个数组与令一个数组比较是通过两个嵌套for循环实现的,一组中奖号码与a[i][7]进行比较时,实际上是,将二维数组拆分为一维数组,即一行一行的与中奖号码进行对比。代码如下:
public static int[] Bijiao(int[]a,int[]b){
int c=0;int x1=0;int x2=0;int x3=0;
int x4=0;int x5=0;int x6=0;int x7=0;
int c6=0;int c5=0;int c4=0;
int c3=0; int c2=0;int c1=0;
int[] count=new int[6];
if(a[6]==b[6]) {
x7=a[6];
}
for (int i=0;i<a.length-1;i++) {
for (int j=0; j<a.length-1;j++) {
if(a[i]==b[j]){
c++;//判断有几个数字重复
if(c==1) {
//对于不同的重复的值,赋值出来,方便显示出来
x1=a[i];
}else if(c==2) {
x2=a[i];
}else if(c==3) {
x3=a[i];
}else if(c==4) {
x4=a[i];
}else if(c==5) {
x5=a[i];
}else if(c==6) {
x6=a[i];
}
}
}
}
if(c==1&&x7!=0) {
//判断红球蓝球的中奖情况
System.out.println("中的红球数字为:"+x1+
"中的蓝球数字为:"+x7+" 中六等奖--5元");
}else if(c==0&&x7!=0) {
System.out.println("红球中"+c+"个 "+
"蓝球中了,为"+x7+" 中六等奖--5元");
}else if(c==2&&x7!=0) {
System.out.println("中的红球数字为:"+x1+" "+x2