一、双色球玩法
双色球是一种大盘玩法游戏,属乐透型彩票范畴,由中国福利彩票发行管理中心统一组织发行,在全国范围内销售。
二、规则介绍
双色球采用计算机网络系统发行销售,并定期开奖。中奖号码由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("很遗憾,您未中奖");
}
五、运行结果展示
第一行为随机生成的中奖号码
懂了原理之后,希望大家在日常生活中也能够中一等奖!
同时也希望大家:量力而行,理性购彩!