JAVA模拟福利彩票双色球(选号,判断是否中奖,以及中奖号码)

一,双色球中奖规则(均不分顺序):
一等奖: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
			
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

十八画生xy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值