0
点赞
收藏
分享

微信扫一扫

Java基础部分综合演练:双色球案例

i奇异 2022-03-12 阅读 46

package A双色球;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
//玩法说明:
/*
双色球投注区分为红球号码区和蓝球号码区,
红球号码范围为01~33,
蓝球号码范围为01~16,
双色球每期从33个红球中开出6个号码,
从16个蓝球中开出一个号码作为中奖号码,
双色球玩法即是开奖号码的6个红球号码和1个蓝球号码,顺序不限
*/

//案例分析
/*
1.如何产生蓝球和红球?
2.如何接收用户选号?
3.如何验证是否中奖?
4.公布本期中奖号码
*/

//实现步骤
/*
1.整体实现思路
2.随机取值不重复算法(系统和用户)
3.判断是否中奖的逻辑
4.结果输出
*/

/*
模拟双色球案例
1.准备相关变量
1.用户选择是机选还是手选号码
2.接收用户选号(6红,1蓝)
3.生成系统号码(6红,1蓝)
4.比较系统号码和用户号码,记录个数
5.验证是否中奖
6.系统号码排序
7.公布结果

*/
public class 双色球 {
public static void main(String[] args) {

	// 定义相关的变量
	int[] redBall = new int[33];// 用于存储1-33的红球号码
	// 蓝球只有一个,随机生成即可,无需使用数组
	int[] userRedBall = new int[6];// 用户选择的红球号码
	int[] sysRedBall = new int[6];// 系统生成的红球号码
	int userBlueBall = 0;// 用户选择的蓝球
	int sysBlueBall = 0;// 系统生成的蓝球
	int redCount = 0;// 记录用户选择正确的红球数
	int blueCount = 0;// 记录用户选择正确的蓝球数
	// 需要随机生成6个在1-33直接不重复的数(算法)
	for (int i = 0; i < redBall.length; i++) {
		redBall[i] = i + 1;
	}
	// 游戏开始【系统提示】
	System.out.println("双色球游戏开始,good 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;
		}
	}
	input.close();

	// 系统随机生成号码
	// 红球
	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 (blueCount == 0 && redCount <= 3) {
		System.out.println("未中奖");
	} else if (blueCount == 1 && redCount <= 3) {
		System.out.println("中了六等奖!兑换5块钱");
	} else if ((blueCount == 1 && redCount == 3) || (blueCount == 0 && redCount == 4)) {
		System.out.println("中了五等奖!兑换10块钱");
	} else if ((blueCount == 1 && redCount == 4) || (blueCount == 0 && redCount == 5)) {
		System.out.println("中了四等奖!兑换200块钱");
	} else if (blueCount == 1 && redCount == 5) {
		System.out.println("中了三等奖!兑换3000块钱");
	} else if (blueCount == 0 && redCount == 6) {
		System.out.println("中了二等奖!兑换150万块钱");
	} else if (blueCount == 1 && redCount == 6) {
		System.out.println("中了一等奖!兑换500万块钱");
	} else {
		System.out.println("系统有误,中奖无效");
	}

	// 公布本期中奖(系统)号码
	System.out.println("本期中奖红球号码为:");
	sort(sysRedBall);
	System.out.println(Arrays.toString(sysRedBall));
	System.out.println("本期中奖蓝球号码为:" + sysBlueBall);

	// 公布用户号码
	System.out.println("您选择的红球号码为:");
	sort(userRedBall);
	System.out.println(Arrays.toString(userRedBall));
	System.out.println("您选择的蓝球号码为:" + userBlueBall);
}

//#########################################################################
//#########################################################################
// 用于在指定数列中,随机生成多个不重读的数算法
// redBall为总数,生成的数存在userRedBall
public static void computerSelection(int[] redBall, int[] userRedBall) {
Random r = new Random();
int index = -1;// 即为下面生成的值,代表下标的值,因为要反复用先定义
for (int i = 0; i < userRedBall.length; i++) {

		// r.nextInt();随机生成一个数,括号内为最大值
		index = r.nextInt(redBall.length - 1-i);
		// index即为我们要存储的那个数的下标
		// 我们先把它挪到最后面去,下次不再取到它,因为每次length-1
		userRedBall[i] = redBall[index];
		// 将刚才随机生成下标所在位置的数赋值给userRedBall的下标为i的位值

		int temp = redBall[index];// 用一个临时变量保存刚才随机生成的数的值
		redBall[index] = redBall[redBall.length - 1 - i];// 将最后一个数的值赋给刚才那个随机变量所在位置的数
		redBall[redBall.length - 1 - i] = temp;// 将随机生成的数的值赋值给总数组最后一个数(个人感觉没必要目前
	}
}

//#########################################################################
//#########################################################################
// 冒泡排序
public static void sort(int[] ball) {
for (int i = 0; i < ball.length - 1; i++) {
for (int j = 0; j < ball.length - 1 - i; j++) {
if (ball[j] > ball[j + 1]) {
ball[i] = ball[j] + ball[i] - (ball[j] = ball[i]);
}
}
}
}
}

举报

相关推荐

0 条评论