用Java代码实现双色球彩票

模拟整个双色球彩票的购买、开奖和中奖流程

在这里插入图片描述

一、双色球玩法规则:
1、投注:
  • (1)双色球投注区分为红色球号码区和蓝色球号码区,
  • (2)红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。
  • (3)投注时选择6个红色号码和1个蓝色球号码组成。
2、中奖
  • (1)一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖;
  • (2)二等奖:投注号码与当期开奖号码中的6个红色球号码相同,即中奖;
  • (3)三等奖:投注号码与当期开奖号码中的任意5个红色球号码和1个蓝色球号码相同,即中奖;
  • (4)四等奖:投注号码与当期开奖号码中的任意5个红色球号码相同,或与任意4个红色球号码和1个蓝色球号码相同,即中奖;
  • (5)五等奖:投注号码与当期开奖号码中的任意4个红色球号码相同,或与任意3个红色球号码和1个蓝色球号码相同,即中奖;
  • (6)六等奖:投注号码与当期开奖号码中的1个蓝色球号码相同,即中奖。
二、业务流程:

1、用户购买彩票,分为自选和机选两种
2、现场开奖
3、根据用户购买的号码和现场开奖的号码进行中奖对比

三、代码展示
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class MyDoubleBallTest {
   public static void main(String[] args) {
   	//main()方法为主流程
   	//初始化Scanner类型的变量input
   	Scanner input = new Scanner (System.in);
   	//1、生成菜单显示
   	System.out.println("===================================");

   	System.out.println("欢迎光临彩票中心");
   	System.out.println("咨询电话:13988886666");
   	System.out.println("===========================================");
   	//2、进入循环,判断用户输入的信息
   	while(true) {
   		//因为双色球的值类似于01,15之类的,所以初始化一个String类型的数组来存储选出来的结果
   		String[] userNums;
   		System.out.println("菜单功能");
   		System.out.println("1——用户自选");
   		System.out.println("2——机器帮选");
   		System.out.println("0——退出程序");
   		System.out.println("请用户进行选择操作:");
   		//初始化一个int类型的变量userChooseNum用来存储用户的输入
   		int userChooseNum = input.nextInt();
   		//对用户输入的数字进行判断
   		switch (userChooseNum) {
   		case 1:
   			//用户进行自选
   			userNums = chooseNumsBySelf(input);
   			break;
   		case 2:
   			//机器进行帮选
   			userNums = chooseNumsByMachine();
   			break;
   		case 0:
   			//退出整个程序
   			System.out.println("您已退出程序,欢迎您的下次光临!");
   			System.exit(0);
   		default:
   			//用户输入有误,提醒用户重新输入
   			System.out.println("您输入的数字有误,请您重新选择!");
   			//输入错误,退出本次循环,进入下次循环
   			continue;
   		}
   		//3、输出用户最终选择的结果
   		System.out.println("您选择的双色球号码是:"+Arrays.toString(userNums));
   		//4、通过随机数生成中奖号码(中奖号码的生成方式就是机器生成的方式)
   		String[] luckyNums =  chooseNumsByMachine();
   		System.out.println("本次中奖的双色球号码是: "+Arrays.toString(luckyNums));
   		//5、进行用户双色球号码与中奖双色球号码的对比,判断用户是否中奖
   		isWinningNums(userNums,luckyNums);
   	}
   }


   /**
    * 用户进行自选功能方法
    * @return
    */
   public static String[] chooseNumsBySelf(Scanner input) {
   	//红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。
   	//因为双色球的号码都是类似于01,12之类的字符串,因此我们创建一个numsPool数组用来存储01~33的值
   	String[] numsPool = {
   			"01","02","03","04","05","06","07","08",
   			"09","10","11","12","13","14","15","16",
   			"17","18","19","20","21","22","23","24",
   			"25","26","27","28","29","30","31","32","33"
   	};
   	//初始化boolean类型的数组numsPoolFlag,默认数值为false
   	boolean[] numsPoolFlag = new boolean[33] ;
   	//1、进行红球的号码获取
   	//初始化长度为6的String类型的userNums数组用来存储用户选择的红色号码
   	String[] userNums = new String[6];
   	//循环数组进行值的输入
   	for(int i = 0; i<userNums.length;i++) {
   		int redNum = 0;
   		while(true) {
   			//提醒用户输入号码
   			System.out.println("请您从1~33的数字中输入红球第【"+(i+1)+"】位号码:");
   			redNum = input.nextInt();
   			//对用户输入的号码进行判断
   			if(redNum < 1||redNum > 33 ) {
   				//用户输入错误
   				System.out.println("您的输入有误,请您输入1~33中的有效数字!");
   				continue;
   			}
   			//此时的redNum表示用户输入的数字正确
   			//为了使用户输入的数字不重复,进行标志位操作
   			//用户所输的数字-1即为numsPoolFlag中所对应的值,默认数值为false即用户输入的数字没有重复
   			if(numsPoolFlag[redNum-1]) {
   				//表示用户输入的数字重复,提醒用户重新输入
   				System.out.println("您输入的第【"+(i+1)+"】位号码重复了,请您重新输入!");
   				continue;
   			}
   			break;
   		}
   		//将选中的红色号码赋值给用户数组
   		userNums[i] = numsPool[redNum-1];
   		//将标志位更改为true
   		numsPoolFlag[redNum-1] = true;
   	}
   	// 使用 Arrays.sort() 对现有的六个红球号码进行排序
   	Arrays.sort(userNums);
   	//2、蓝色球号码区由1-16共十六个号码组成
   	//初始化int类型的blueNum作为蓝色球的号码
   	int blueNum = 0;
   	while(true) {
   		//提醒用户输入号码
   		System.out.println("请您从1~16的数字中输入1个蓝球的号码:");
   		blueNum = input.nextInt();
   		//对用户输入的号码进行判断
   		if(blueNum < 1|| blueNum > 16 ) {
   			//用户输入错误
   			System.out.println("您的输入有误,请您输入1~16中的有效数字!");
   			continue;
   		}
   		break;
   	}
   	//3、获得蓝球号码后进行红球号码和蓝球号码的拼合
   	//复制userNums数组并将数组的长度设置为7
   	userNums = Arrays.copyOf(userNums, userNums.length+1);
   	//将userNums数组的最后一位设置为蓝球号码
   	userNums[userNums.length-1] = numsPool[blueNum-1];	
   	return userNums;
   }
   /**
    * 机器为用户进行帮选的功能
    * @return
    */
   public static String[] chooseNumsByMachine() {
   	//红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。
   	//因为双色球的号码都是类似于01,12之类的字符串,因此我们创建一个numsPool数组用来存储01~33的值
   	String[] numsPool = {
   			"01","02","03","04","05","06","07","08",
   			"09","10","11","12","13","14","15","16",
   			"17","18","19","20","21","22","23","24",
   			"25","26","27","28","29","30","31","32","33"
   	};
   	//初始化boolean类型的数组numsPoolFlag,默认数值为false
   	boolean[] numsPoolFlag = new boolean[33] ;
   	//1、进行红球的号码获取
   	//初始化长度为6的String类型的userNums数组用来存储用户选择的红色号码
   	String[] userNums = new String[6];
   	Random random = new Random();
   	//循环数组进行值的输入
   	for(int i = 0; i<userNums.length;i++) {
   		int redNum = 0;
   		while(true) {
   			redNum = random.nextInt(33);
   			//为了使用户输入的数字不重复,进行标志位操作
   			//用户所输的数字-1即为numsPoolFlag中所对应的值,默认数值为false即用户输入的数字没有重复
   			if(numsPoolFlag[redNum-1]) {
   				//表示数字重复,重新生成随机数
   				continue;
   			}
   			break;
   		}
   		//将选中的红色号码赋值给用户数组
   		userNums[i] = numsPool[redNum];
   		//将标志位更改为true
   		numsPoolFlag[redNum] = true;
   	}
   	// 使用 Arrays.sort() 对现有的六个红球号码进行排序
   	Arrays.sort(userNums);
   	//2、蓝色球号码区由1-16共十六个号码组成
   	//初始化int类型的blueNum作为蓝色球的号码
   	int blueNum = random.nextInt(16);
   	//3、获得蓝球号码后进行红球号码和蓝球号码的拼合
   	//复制userNums数组并将数组的长度设置为7
   	userNums = Arrays.copyOf(userNums, 7);
   	//将userNums数组的最后一位设置为蓝球号码
   	userNums[userNums.length-1] = numsPool[blueNum];	
   	return userNums;
   }
   /**
    * 用户的双色球号码和幸运号码进行对比判断用户是否中奖
    * @param userNums
    * @param luckyNums
    */
   public static void isWinningNums(String[] userNums, String[] luckyNums) {
   	/* (1)一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖;
   	 * (2)二等奖:投注号码与当期开奖号码中的6个红色球号码相同,即中奖;
   	 * (3)三等奖:投注号码与当期开奖号码中的任意5个红色球号码和1个蓝色球号码相同,即中奖;
   	 * (4)四等奖:投注号码与当期开奖号码中的任意5个红色球号码相同,或与任意4个红色球号码和1个蓝色球号码相同,即中奖;
   	 * (5)五等奖:投注号码与当期开奖号码中的任意4个红色球号码相同,或与任意3个红色球号码和1个蓝色球号码相同,即中奖;
   	 * (6)六等奖:投注号码与当期开奖号码中的1个蓝色球号码相同,即中奖。
   	 */
   	//初始化int类型的redSameCount用来存储红色球相同的数量
   	int redSameCount = 0;
   	//初始化int类型的blueSameCount用来存储蓝色球相同的数量
   	int blueSameCount = 0;
   	//1、判断红球相等数量
   	for(int i = 0; i<userNums.length-1;i++) {
   		for(int j =0; j<luckyNums.length-1;j++) {
   			if(userNums[i].equals(luckyNums[j])) {
   				redSameCount++;
   			}
   		}
   	}
   	//2、判断蓝球相等数量
   	if(userNums[userNums.length-1].equals(luckyNums[luckyNums.length-1])) {
   		blueSameCount++;
   	}
   	//3、根据红色球和蓝色球的数量匹配奖项
   	if(redSameCount == 6 && blueSameCount==1) {
   		//一等奖
   		System.out.println("恭喜您获得一等奖,奖项是5000万元!");
   	}else if(redSameCount == 6) {
   		//二等奖
   		System.out.println("恭喜您获得二等奖,奖项是1000万元!");
   	}else if(redSameCount == 5 && blueSameCount==1) {
   		//三等奖
   		System.out.println("恭喜您获得三等奖,奖项是500元!");
   	}else if(redSameCount == 5 ||redSameCount == 4 && blueSameCount==1) {
   		//四等奖
   		System.out.println("恭喜您获得四等奖,奖项是200元!");
   	}else if(redSameCount == 4 ||redSameCount == 3 && blueSameCount==1) {
   		//五等奖
   		System.out.println("恭喜您获得五等奖,奖项是10元!");
   	}else if(blueSameCount==1) {
   		//六等奖
   		System.out.println("恭喜您获得六等奖,奖项是5元!");
   	}else {
   		//未中奖
   		System.out.println("很遗憾,您本次未能中奖!!!");
   	}
   }
}

  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值