代码说明
为方便刚接触Java编程不久的朋友阅读学习,下面代码很多重复的模块未使用面向对象的知识对其进行封装,代码显得有些冗余,希望大牛们手下留情。若对该代码有什么好的意见或建议的,欢迎在评论区指出,大家互相交流学习!
代码菜单功能
这里就不写文字说明了,做了张思维导图直接放下面:
Java代码
DoubleChromosphere.java
import java.util.Random;
import java.util.Scanner;
public class DoubleChromosphere {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("************欢迎使用双色球管理系统************");
//创建控制台输入对象
Scanner scanner = new Scanner(System.in);
//随机数工具类
Random random = new Random();
//用来存储用户信息的数组
String[][] user = new String[5][2];
//定义变量记录用户的注册量
int userCount = 0;
//记录用户登录状态
boolean isLogin = false;
//定义一个二维数组,存储用户买的彩票
int[][] lottery = new int[5][7];
//记录购买彩票的数量
int buyCount = 0;
while (true) {
System.out.println("1-注册 2-登录 3-机选 4-自选 5-查看 6-开奖 0-退出");
System.out.println("请输入您的选项");
int choose = scanner.nextInt();
switch (choose) {
case 1:
//System.out.println("注册");
//先判断用户的注册量
if (userCount == 5) {
System.out.println("对不起,超过最大注册人数");
break;
}
//可以注册
//存储用户名
String username = null;
while (true) {
System.out.println("请输入用户名:");
username = scanner.next();
//定义boolean变量,记录用户名是否已经存在
boolean isSave = false;
//根据用户的注册决定比较次数
for (int i = 0; i < userCount; i++) {
//取出已注册用户的用户名
if (user[i][0].equals(username)) {
System.out.println("用户名已存在,请重新输入");
isSave = true;
break;
}
}
//如果循环结束isSave中还是false,说明没有发现重复的用户名
if (!isSave) {
System.out.println("用户名可以使用");
break;
}
}
//定义变量存储用户的密码
String password = null;
while (true) {
System.out.println("请输入密码:");
password = scanner.next();
System.out.println("请重新输入密码:");
String repeat = scanner.next();
if (password.equals(repeat)) {
//如果两次密码相等,就停止while循环
break;
} else {
System.out.println("两次输入的密码不同,请重新输入");
}
}
//使用user存储用户名和密码
user[userCount][0] = username;
user[userCount][1] = password;
userCount++;
System.out.println("注册成功!");
break;
case 2:
//System.out.println("登录");
if (isLogin == true) {
System.out.println("已经有用户登录");
break;
}
//提示用户输入用户名
System.out.println("请输入用户名");
String name = scanner.next();
//提示用户输入密码
System.out.println("请输入密码");
String pwd = scanner.next();
//根据用户名和密码去user数组中校验,根据用户注册量来设置校验次数
for (int i = 0; i < userCount; i++) {
//用户名和密码都要一致才能登录成功
if (name.equals(user[i][0]) && pwd.equals(user[i][1])) {
System.out.println("登录成功!");
//登录状态改为true
isLogin = true;
break;
}
}
if (isLogin == false) {
System.out.println("用户不存在或密码错误,请重新登录");
}
break;
case 3:
//System.out.println("机选");
//先判断用户是否已登录
if (isLogin == false) {
System.out.println("您还未登录,请先登录!");
break;
}
//再判断是否已达购买上限
if (buyCount == 5) {
System.out.println("已达到购买上限");
break;
}
//定义数组,存储双色球
int[] current1 = new int[7];
//机选红球6个[1,33]
for (int i = 0; i < 6; i++) {
int red = random.nextInt(33) + 1;
//定义变量存储当前号码是否已在数组中出现
boolean isFlag = false;
for (int j = 0; j < 6; j++) {
if (red == current1[j]) {
isFlag = true;
break;
}
}
if (isFlag) {
i--;
} else {
current1[i] = red;
}
}
//机选蓝球1个[1,16]
current1[6] = random.nextInt(16) + 1;
//展示机选结果
System.out.println("机选结果为:");
for (int i = 0; i < current1.length; i++) {
System.out.print(current1[i] + "\t");
}
System.out.println();
//存储机选结果
lottery[buyCount] = current1;
buyCount++;
System.out.println("购买成功!");
break;
case 4:
//System.out.println("自选");
//先判断用户是否已登录
if (isLogin == false) {
System.out.println("您还未登录,请先登录!");
break;
}
//再判断是否已达购买上限
if (buyCount == 5) {
System.out.println("已达到购买上限");
break;
}
//定义数组接受用户手动输入的双色球
int[] current2 = new int[7];
for (int i = 0; i < 6; i++) {
System.out.println("请输入红色球号码:");
int red = scanner.nextInt();
//定义变量存储当前号码是否已在数组中出现
boolean isFlag = false;
for (int j = 0; j < 6; j++) {
if (red == current2[j]) {
isFlag = true;
break;
}
}
if (isFlag) {
i--;
System.out.println("输入的号码重复");
} else {
//当用户输入的号码如果不在1-33之间,此号码不能用
if (red >=1 && red <= 33) {
current2[i] = red;
} else {
i--;
System.out.println("输入的号码有误,请输入1-33之间的号码");
}
}
}
while (true) {
System.out.println("请输入蓝色球号码:");
int blue = scanner.nextInt();
if (blue >= 1 && blue <= 16) {
current2[6] = blue;
break;
}else {
System.out.println("号码不可用,请重新输入1-16");
}
}
//展示自选结果
System.out.println("自选结果为:");
for (int i = 0; i < current2.length; i++) {
System.out.print(current2[i] + "\t");
}
System.out.println();
//存储自选结果
lottery[buyCount] = current2;
buyCount++;
System.out.println("购买成功!");
break;
case 5:
//System.out.println("查看");
if (isLogin == false) {
System.out.println("您还未登录,请先登录!");
break;
}
System.out.println("购买结果有:");
for (int i = 0; i < buyCount; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(lottery[i][j] + "\t");
}
System.out.println();
}
break;
case 6:
//System.out.println("开奖");
//先判断用户是否已登录
if (isLogin == false) {
System.out.println("您还未登录,请先登录!");
break;
}
//系统生成中奖号码
int[] win = new int[7];
//机选红球6个[1,33]
for (int i = 0; i < 6; i++) {
int red = random.nextInt(33) + 1;
//定义变量存储当前号码是否已在数组中出现
boolean isFlag = false;
for (int j = 0; j < 6; j++) {
if (red == win[j]) {
isFlag = true;
break;
}
}
if (isFlag) {
i--;
} else {
win[i] = red;
}
}
//生成一个蓝色中奖号码
win[6] = random.nextInt(16) + 1;
System.out.println("中奖号码为:");
for (int i = 0; i < win.length; i++) {
System.out.print(win[i] + "\t");
}
System.out.println();
System.out.println("您的中奖情况:");
//根据中奖规则给用户开奖
for (int i = 0; i < buyCount; i++) {
int[] mine = lottery[i];
//记录红色球中奖个数
int redCount = 0;
//记录蓝色球中奖
int blueCount = mine[6] == win[6] ? 1 : 0;
for (int j = 0; j < 6; j++) {
for (int k = 0; k < 6; k++) {
if (mine[j] == win[k]) {
redCount++;
break;
}
}
}
//红色中奖个数和蓝色中奖个数都获取到了
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 == 2 && blueCount == 1)
|| (redCount == 1 && blueCount == 1)
|| (redCount == 0 && blueCount == 1)) {
System.out.println("六等奖");
}else {
System.out.println("很遗憾,下次再来");
}
}
//清空中奖号码
lottery = new int[5][7];
buyCount = 0;
break;
case 0:
//System.out.println("退出");
//先判断用户是否已登录
if (isLogin == false) {
System.out.println("您还未登录,请先登录!");
break;
}
//退出后把登录状态置为false
isLogin = false;
//清空该用户彩票数组
lottery = new int[5][7];
buyCount = 0;
System.out.println("欢迎再次登录");
break;
default:
System.out.println("您的输入有误,请重新输入");
break;
}
}
}
}