Java之双色球系统

一、双色球玩法

双色球是一种大盘玩法游戏,属乐透型彩票范畴,由中国福利彩票发行管理中心统一组织发行,在全国范围内销售。

二、规则介绍

双色球采用计算机网络系统发行销售,并定期开奖。中奖号码由7个号码组成,其中6个为红色球号码,1个为蓝色球号码。中奖等级和奖金分配如下:

  • 一等奖:7个号码全部相符(6个红色球号码和1个蓝色球号码),奖金按中奖注数均分该奖级的奖金。
  • 二等奖:6个红色球号码相符,奖金按中奖注数均分该奖级的奖金。
  • 三等奖:5个红色球号码和1个蓝色球号码相符,奖金为单注固定奖额。
  • 四等奖:5个红色球号码相符,或4个红色球号码和1个蓝色球号码相符,奖金为单注固定奖额。
  • 五等奖:4个红色球号码相符,或3个红色球号码和1个蓝色球号码相符,奖金为单注固定奖额。
  • 六等奖:1个蓝色球号码相符(有无红色球号码相符均可),奖金为单注固定奖额。

三、思路分析

1.生成中奖号码

由于双色球的中奖号码是未知的,我们需要随机生成一组中奖号码,其中包括:

红球:6个,范围为1~33;

篮球:1个,范围为1~16;

需要注意的是,生成的6个红色号码,不可以重复,但是蓝色号码可以和红色号码重复。

2.用户的输入号码

输入时需要注意判断输入的号码的范围和唯一性(蓝色号码可以和红色号码重复)

超出范围则需要重新输入;

3.中奖校验

前两个步骤都完成后,我们需要将我们输入的的七个号码与系统生成的号码进行校验,进而判断中奖情况,根据双色球规则介绍进行奖项等级打印输入

四、代码实现

1.生成中奖号码 

初始化一个数组(动态初始化,长度为7):

int [] arr=new int[7];

for循环,生成6个随机数(红球)(范围:1~33): 

Random r = new Random();
		for(int i=0;i<6;i++){
			//获取红球号码
			int red=r.nextInt(33)+1;//红球号码不能重复-->方法
			
		}

 生成1个随机数(篮球)(范围:1~16):

int blue=r.nextInt(16)+1;
		arr[arr.length-1]=blue;
		

方法体返回一个数组(即随机生成的7个数字):

return arr;

 打包成一个方法体:

public static int[] creatNumber(){
		//创建数组用于存储中奖号码:6红1蓝
		int [] arr=new int[7];
		//随机生成号码并添加到数组内
		//红球1~33,不能重复;篮球1-6可以和红球重复
		
		//生成红球号码
		Random r = new Random();
		for(int i=0;i<6;i++){
			//获取红球号码
			int red=r.nextInt(33)+1;//红球号码不能重复-->方法
			
		}
		//生成篮球号码并添加到数组当中
		int blue=r.nextInt(16)+1;
		arr[arr.length-1]=blue;
		return arr;
	}

但是,其中需要注意的是,我们随机生成的红色号码,是不可以互相重复的,蓝色号码可以与红色号码相同,所以这里需要多加一步,判断随机生成的号码,数组中是否已经存在,若不存在则添加进入数组;

1.1判断生成的号码,数组中是否已存在

public static boolean contains(int[]arr,int number){
		for(int i=0;i<arr.length;i++){
			if(arr[i]==number){
				return true;
			}
		}
		return false;
	} 

 最后,进而这一部分(生成中奖号码)代码变为

public static int[] creatNumber(){
		//创建数组用于存储中奖号码:6红1蓝
		int [] arr=new int[7];
		//随机生成号码并添加到数组内
		//红球1~33,不能重复;篮球1-6可以和红球重复
		
		//生成红球号码
		Random r = new Random();
		for(int i=0;i<6;){
			//获取红球号码
			int red=r.nextInt(33)+1;//红球号码不能重复-->方法
			boolean flag=contains(arr,red);
			if(!flag){
				arr[i]=red;
				i++;
			}
		}
		//生成篮球号码并添加到数组当中
		int blue=r.nextInt(16)+1;
		arr[arr.length-1]=blue;
		return arr;
	}

 2.用户输入中奖号码

同样动态初始化一个数组(长度依然为7):

int [] arr=new int[7];

键盘录入6个数字(范围在1~33):

(需要注意的是依旧不能重复,且键盘录入的数字不在1~33时打印提示不在范围 )

Scanner sc=new Scanner(System.in);
		for(int i=0;i<6;){
			System.out.println("请输入第"+(i+1)+"个红球号码:");
			int red=sc.nextInt();
			//red在1~33之间,并且不可以重复
			if(red>=1&&red<=33){
				//唯一性
				boolean flag=contains(arr,red);
				if(!flag){
					//不存在
					arr[i]=red;
					i++;
				}else{
					//存在
					System.out.println("当前红球号码已存在,请重新输入");
				}
			}else{
				System.out.println("当前红球号码超出范围,请重新输入");
			}
		}

键盘录入一个数字(范围在1~16) :

(这里需要注意的是如果超出范围,需要重新输入,只有输入有效数字可以,利用while循环)

System.out.println("请输入蓝球号码:");
		while(true){
		    int blue=sc.nextInt();
		    if(blue>=1&&blue<=16){
		    	arr[arr.length-1]=blue;
		    	break;
		    }else{
		    	System.out.println("当前篮球号码超出范围,请重新输入");
		    }
		}

方法体返回一个数组(即键盘录入的7个数字):

return arr;

 打包成一个方法体:

public static int[] userInput(){
		int [] arr=new int[7];
		Scanner sc=new Scanner(System.in);
		for(int i=0;i<6;){
			System.out.println("请输入第"+(i+1)+"个红球号码:");
			int red=sc.nextInt();
			//red在1~33之间,并且不可以重复
			if(red>=1&&red<=33){
				//唯一性
				boolean flag=contains(arr,red);
				if(!flag){
					//不存在
					arr[i]=red;
					i++;
				}else{
					//存在
					System.out.println("当前红球号码已存在,请重新输入");
				}
			}else{
				System.out.println("当前红球号码超出范围,请重新输入");
			}
		}
		System.out.println("请输入蓝球号码:");
		while(true){
		    int blue=sc.nextInt();
		    if(blue>=1&&blue<=16){
		    	arr[arr.length-1]=blue;
		    	break;
		    }else{
		    	System.out.println("当前篮球号码超出范围,请重新输入");
		    }
		}
		
		return arr;
	}

 3.中奖校验

随机生成的数组和键盘录入的数组都完成以后,我们需要判断我们的键盘录入的号码,根据双色球系统的规则,与随机生成的号码校验,然后打印输出我们所录入的号码的中奖情况;

我们需要分别判断红球和篮球的中奖个数,所以我们这里需要统计变量,以便于后面便于判断奖项;

 定义两个统计变量:

        int redCount=0;
		int blueCount=0;  //默认没有中奖

判断红球的中奖个数:

这里需要注意的是,双色球的规则是,只要号码存在即可,不需要位置一样,所以我们定义一个统计变量redCount,如果我们所输入的号码在随机生成的数组中存在,那么执行redCount++;

这里的for循环只判断length-1就行(因为只判断红球);

       for(int i=0;i<user.length-1;i++){
			int red=user[i];
			//只要存在号码即可,不需要位置一样
			for(int j=0;j<=arr.length-1;j++){
				if(red==arr[j]){
					redCount++;
					//如果找到了,后面的数字没必要比较了
				    //跳出内循环,继续判断下一个红球号码是否中奖
					break;
				}
			}
		}

判断篮球中奖个数:

        int blue=user[user.length-1];
		if(blue==arr[arr.length-1]){
			blueCount++;
		}

 4.打印输出中奖情况

根据双色球系统的规则,以及中奖校验的结果,采用if-else if-else语句直接打印输出即可;

        if(redCount==6&&blueCount==1){
			System.out.println("恭喜你,中了一等奖");
		}else if(redCount==6&&blueCount==0){
			System.out.println("恭喜你,中了二等奖");
		}else if(redCount==5&&blueCount==1){
			System.out.println("恭喜你,中了三等奖");
		}else if((redCount==5&&blueCount==0)||(redCount==4&&blueCount==1)){
			System.out.println("恭喜你,中了四等奖");
		}else if((redCount==4&&blueCount==0)||(redCount==3&&blueCount==1)){
			System.out.println("恭喜你,中了五等奖");
		}else if(redCount<3&&blueCount==1){
			System.out.println("恭喜你,中了六等奖");
		}else{
			System.out.println("很遗憾,您未中奖");
		}

五、运行结果展示

第一行为随机生成的中奖号码

懂了原理之后,希望大家在日常生活中也能够中一等奖!

同时也希望大家:量力而行,理性购彩!

  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值