java模拟实现双色球案例

玩法说明:
1、双色球投注号码区分为“红球号码区”和“篮球号码区”
2、红球号码范围为:01~33
3、蓝球号码范围为:01~16
4、双色球每期从33个红球开出6个号码,从16个蓝球开出1个号码作为中奖号码
5、双色球玩法即是竞猜开奖号码的6个红球和一个蓝球号码,顺序不限

中奖条件与奖金如下:
java模拟实现双色球案例_第1张图片
实现步骤:
1、准备变量
用户红球、系统红球、用户蓝球、系统蓝球、红球中奖数记录,蓝球中奖记录、红球总数。
2、用户选择是机选还是手选(其他选择将重选)
3、接收用户选号
4、生成系统号码和用户号码(随机生成不重复数算法)
5、统计红球和蓝球相等结果数
6、验证中奖情况
7、系统号码与用户号码排序
8、公布中奖结果

随机生成不重复数
33个数选6个最优是取6次,每次选择排除已被选了的数(把已选的数和数组最后一个数交换位置,下次在(随机数组的长度-已选数的次数)中生成随机数)

具体实现代码如下:

import java.util.Scanner;
import java.util.Random;
import java.util.Arrays;
public class doubleColorBall{
	public static void main(String[] args){
	//==============================准备变量==============================
		int[] userRedBall = new int[6]; //用户红球
		int[] sysRedBall = new int[6]; //系统红球
		int sysBlueBall = 0; //系统蓝球
		int userBlueBall = 0; //用户蓝球
		int redCount = 0; //红球中奖数记录
		int blueCount = 0; //蓝球中奖记录
		int[] redBall = new int[33]; //红球总数
		for(int i=0;i<redBall.length;i++){
			redBall[i] = i+1;
		}
		//游戏开始,系统提示是机选还是手选
		System.out.println("双色球游戏开始,goog luck!");
		System.out.println("请选择是机选还是手选:1、机选,2手选");
		Scanner input = new Scanner(System.in);
		Random r = new Random();//随机生成随机数		
		
		boolean flag =true;//判断是否需要重新输入
		while(flag){
			int isAuto = input.nextInt();
			
			switch(isAuto){
				case 1:{
					computerSelection(redBall,userRedBall);//用户机选红球
					userBlueBall = r.nextInt(16)+1;//用户机选蓝球
					flag = false;
					break;
				}
				case 2:{
					System.out.println("请选择6个红球号码,1-33");
					for(int i=0;i<userRedBall.length;i++){
							userRedBall[i] = input.nextInt();
					}
					System.out.println("请选择1个蓝球号码,1-16");
					userBlueBall = input.nextInt();
					flag = false;
					break;
				}
				default:{
					System.out.println("请选择是机选还是手选:1、机选,2手选");
					break;
				}
			}
		}
		//=========================生成系统的号码====================
		computerSelection(redBall,sysRedBall);//系统机选红球
		sysBlueBall = r.nextInt(16)+1;//系统机选蓝球
		//=========================统计结果=========================
		//统计用户红球与系统红球相等结果
		for(int i=0; i<userRedBall.length;i++){
			for(int j=0; j<sysRedBall.length-redCount;j++){
				if(userRedBall[i]==sysRedBall[j]){
					int temp = sysRedBall[j];//相同的球后面则不再比较,减少比较次数
					sysRedBall[j] = sysRedBall[sysRedBall.length-1-redCount];
					sysRedBall[sysRedBall.length-1-redCount] = temp;
					redCount++;
					break;
				}
			}
		}
		if(userBlueBall==sysBlueBall){
			blueCount = 1;
		}
		//=========================验证是否中奖=========================
		//概率大的放前面,提升代码执行效率
		if(redCount<4 && blueCount==0){
			System.out.println("你离中奖只差一步,请继续努力");
		}else if(redCount<=2 && blueCount==1){
			System.out.println("恭喜你中了六等奖,5元");
		}else if((redCount==3 && blueCount==1)||(redCount==4 && blueCount==0)){
			System.out.println("恭喜你中了五等奖,10元");
		}else if((redCount==4 && blueCount==1)||(redCount==5 && blueCount==0)){
			System.out.println("恭喜你中了四等奖,200元");
		}else if(redCount==5 && blueCount==1){
			System.out.println("恭喜你中了三等奖,3000元");
		}else if(redCount==6 && blueCount==0){
			System.out.println("恭喜你中了二等奖,15万元");
		}else if(redCount==6 && blueCount==1){
			System.out.println("恭喜你中了一等奖,500万元");
		}
		//=========================公布系统号码=========================
		System.out.println("本期中奖红球号码为");
		Arrays.sort(sysRedBall);//工具类实现号码排序
		System.out.println(Arrays.toString(sysRedBall));//工具类实现数组输出
		System.out.println("本期中奖蓝球号码为"+sysBlueBall);
		//公布用户号码
		System.out.println("你的红球号码为");
		Arrays.sort(userRedBall);
		System.out.println(Arrays.toString(userRedBall));		
		System.out.println("你的蓝球号码为"+userBlueBall);
	}
	//用于在一组数列中,随机生成不重复数算法(自动选红球)
	private static void computerSelection(int[] redBall,int[] userRedBall){
		Random r = new Random();
		int index = -1;
		for(int i=0;i<userRedBall.length;i++){
			index = r.nextInt(redBall.length-i);
			userRedBall[i] = redBall[index];
			int temp = redBall[index];
			redBall[index] = redBall[redBall.length-i-1];
			redBall[redBall.length-i-1] = temp;
		}				
	}
}

你可能感兴趣的:(java基础)