双色球彩票系统:
- 彩票号码由7位数字组成.6个红球和1个蓝球组成
- 6个红球的取值范围[1, 33],并且红球不可以重复!
- 1个蓝球取值范围[1, 16]
- 一注彩票的最终结果是 6位红球按照升序排序 + 1个蓝球
- 有以下7个功能需要围绕彩票系统完成!
System.out.println(“欢迎进入忽悠你彩票系统,请选择操作:”);
System.out.println(“1.注册”);
System.out.println(“2.登录”);
System.out.println(“3.机选”);
System.out.println(“4.自选”);
System.out.println(“5.查看”);
System.out.println(“6.开奖”);
System.out.println(“7.退出”);
package com.lanou;
import java.util.Random;
import java.util.Scanner;
public class LotterySystem {
public static void main(String[] args) {
//1.定义二维字符串数组 用于注册功能.存储用户信息
String[][] users = new String[10][2];
/* 账号0 密码1
* null null
* null null
*
*/
//2.定义二维整型数组,用于存储多注彩票
int[][] lotteryArray = new int[100][7];//假设最多存储10注
/*
* {0,0,0,0,0,0,0,0},
* {0,0,0,0,0,0,0,0},
*/
//3.输入
Scanner scanner = new Scanner(System.in);
//4.随机
Random random = new Random();
//5.定义变量 存储是否退出系统
boolean isLoop = true;//默认是不退出
//6.定义变量 存储是否是登录状态
boolean isLogin = false;//默认是没有登录的
//循环开始
while (isLoop) {
System.out.println("欢迎进入忽悠你彩票系统:");
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.机选");
System.out.println("4.自选");
System.out.println("5.查看");
System.out.println("6.开奖");
System.out.println("7.退出");
System.out.println("请选择要进行的操作:");
//接收用户选择
int choose = scanner.nextInt();
//通过选择 判断进入哪一个功能
switch (choose) {
case 1:
//定义变量 存储账号 密码
String username = "";
String password = "";
//先输入账号
while (true) {
System.out.println("请先输入账号:");
username = scanner.next();
//定义boolean 判断账号是否注册过
boolean isExits = false;
for (int i = 0; i < users.length; i++) {
if(users[i][0] != null && users[i][0].equals(username)) {
isExits = true;
break;
}
}
//遍历结束
if(isExits == true) {
System.out.println("账号已存在!重新注册!");
}else {
break;
}
}
//输入密码
while (true) {
System.out.println("请输入密码:");
password = scanner.next();
System.out.println("再次确认密码:");
String repeat = scanner.next();
if(password.equals(repeat)) {
break;//两次密码一致
}else {
System.out.println("两次密码不一致,请重新设置!");
}
}
//-----------------
//将账号 密码存储
for (int i = 0; i < users.length; i++) {
if(users[i][0] == null) {
users[i][0] = username;
users[i][1] = password;
System.out.println("注册成功!");
//必须停止
break;
}
}
break;
case 2:
if(isLogin) {
System.out.println("已登录!");
break;
}
System.out.println("请输入账号:");
String name = scanner.next();
System.out.println("请输入密码:");
String passwd = scanner.next();
//判断账号和密码 是否存在
for (int i = 0; i < users.length; i++) {
if(users[i][0] != null && users[i][0].equals(name) && users[i][1].equals(passwd)) {
System.out.println("登录成功!");
isLogin = true;
break;
}
}
if (isLogin == false) {
// 等价于 !isLogin
//isLogin == false
System.out.println("登录失败!");
}
break;
case 3:
//必须先登录成功 才可以进行操作
if(isLogin == false) {
System.out.println("请先登录!");
break; //相当于直接结束了case
}
System.out.println("请输入要购买的注数:");
int count = scanner.nextInt();
for(int i = 0; i < count; i++) {
//机选单注---元素个数为7的一维数组
int[] smallArray = new int[7];
for(int j = 0; j < 6; j++) {
int temp = random.nextInt(33) + 1;
//判断此随机数 是否已经存在
boolean isNum = false;//默认不存在
//循环遍历 判断是否存在
for(int k = 0; k < 6; k++) {
if(temp == smallArray[k]) {
isNum = true;
break;
}
}
//for循环结束
if(isNum) {
//j循环失效 数字已经存在
j--;
}else {
//随机数 不存在
smallArray[j] = temp;
}
}
//升序排序
sortArray(smallArray, 6);
//放入蓝球 7个元素 最大下标是6
smallArray[6] = random.nextInt(16) + 1;
//一注彩票 结束
//将一次数组 存储到 lotteryArray二维数组中
for(int x = 0; x < 10; x++) {
if(lotteryArray[x][0] == 0) {
//此行元素值为0 说明还没有放入彩票
for (int y = 0; y < 7; y++) {
lotteryArray[x][y] = smallArray[y];
}
//循环结束 代表一维数组已经放入
break;
}
}
}
System.out.println("购买成功!!");
break;
case 4:
//自选(由用户输入,也可以由用户输出要购买的数量)
if(!isLogin) {
System.out.println("请先登录!");
break;
}
//自选
int[] customArray = new int[7];
for(int i = 0; i < 6; i++) {
System.out.println("请先输入第" + (i + 1) + "个红球号码,范围1-33:");
int temp = scanner.nextInt();
//判断是否符合范围
if(temp < 1 || temp > 33) {
System.out.println("输入范围有误!红球范围[1,33]");
i--;
continue;//结束本次循环 进入下一次循环
}
//判断是否存在
boolean isExits = false;//默认不存在
for (int j = 0; j < 6; j++) {
if(temp == customArray[j]) {
isExits = true;
break;
}
}
//循环遍历结束
if(isExits) {
//该号码已经存在
System.out.println("此红球号码已存在!");
i--;
}else {
customArray[i] = temp;
}
}
//对红球排序
sortArray(customArray, 6);
//设置最后的蓝球
while (true) {
System.out.println("输入蓝球的号码:");
int temp = scanner.nextInt();
if (temp < 1 || temp > 16) {
System.out.println("输入有误,蓝球范围是[1, 16]");
}else {
customArray[6] = temp;
break;
}
}
//代码执行到此处!!
//存储到二维数组中
for (int i = 0; i < lotteryArray.length; i++) {
if(lotteryArray[i][0] == 0) {
for (int j = 0; j < customArray.length; j++) {
lotteryArray[i][j] = customArray[j];
}
System.out.println("手选号码结束!");
//一维数组放入完毕
break;
}
}
break;
case 5:
//查看 已经购买的彩票
//循环数组 查看已经购买的彩票
if(!isLogin) {
System.out.println("请先登录!");
break;
}
System.out.println("以下是您购买的所有彩票:");
for (int i = 0; i < lotteryArray.length; i++) {
if (lotteryArray[i][0] != 0) {
for (int j = 0; j < 7; j++) {
System.out.print(lotteryArray[i][j] + " ");
}
System.out.println();
}
}
break;
case 6:
//开奖
//随机一注彩票
if(!isLogin) {
System.out.println("请先登录!");
break;
}
int[] showArray = randomArray(6);
//排序
sortArray(showArray, 6);
//放入蓝球
showArray[6] = random.nextInt(16) + 1;
System.out.println("开奖号码为:");
for (int i = 0; i < showArray.length; i++) {
System.out.print(showArray[i] + " ");
}
System.out.println();
//------------------------------------------
//判断是否中奖!!!
for(int i = 0; i < lotteryArray.length; i++) {
//只判断有效值
if(lotteryArray[i][0] == 0) {
break;
}
System.out.println("第" + (i + 1) + "注彩票:");
//红球中奖数量
int red = 0;
//蓝球的中奖数量
int blue = 0;
//遍历红球
/*
* 对应位置的
for (int j = 0; j < 6; j++) {
if(lotteryArray[i][j] == showArray[j]) {
red++;
}
}
*/
//不论位置 只要有号码就算
for (int j = 0; j < 6; j++) {
for (int k = 0; k < 6; k++) {
if(lotteryArray[i][j] == showArray[k]) {
red++;
break;//可写可不写 提高效率
}
}
}
//查看蓝球
if(lotteryArray[i][6] == showArray[6]) {
blue++;
}
System.out.println("红球中奖数量" + red + ";蓝球中奖数量:" + blue);
//中间结果
if(red == 6 && blue == 1) {
System.out.println("一等奖");
}else if(red == 6 && blue == 0) {
System.out.println("二等奖");
}else if(red == 5 && blue == 1) {
System.out.println("三等奖");
}else if(red == 5 && blue == 0 || (red == 4 && blue == 1)) {
System.out.println("四等奖");
}else if(red == 4 && blue == 0 || (red == 3 && blue == 1)) {
System.out.println("五等奖");
}else if(red == 2 && blue == 1 || (red == 1 && blue == 1) || (red == 0 && blue == 1)) {
System.out.println("六等奖");
}else {
System.out.println("恭喜你!阳光普照奖!");
}
}
break;
case 7:
//退出系统
isLoop = false;//结束while循环
break;
//----补充 8选项 用于查看注册用户信息
case 8:
System.out.println("系统中的用户信息:");
for (int i = 0; i < users.length; i++) {
if(users[i][0] != null) {
System.out.println(users[i][0] + " " + users[i][1]);
}
}
break;
default:
break;
}
}
}
//封装红球排序
public static void sortArray(int[] array, int length) {
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - i - 1; j++) {
if(array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
//封装机选单注彩票
public static int[] randomArray(int length) {
int[] tempArray = new int[length + 1];
Random random = new Random();
for(int i = 0; i < length; i++) {
int temp = random.nextInt(33) + 1;
//判断此随机数 是否已经存在
boolean isNum = false;//默认不存在
//循环遍历 判断是否存在
for(int j = 0; j < length; j++) {
if(temp == tempArray[j]) {
isNum = true;
break;
}
}
//for循环结束
if(isNum) {
//j循环失效 数字已经存在
i--;
}else {
//随机数 不存在
tempArray[i] = temp;
}
}
return tempArray;
}
}