模拟彩票系统
public class Demo {
public static void main(String[] args) {
int[] luckNums = createLuckNums();
int[] userNums = userInputNums();
System.out.println(judge(luckNums, userNums));
}
// 随机生成双色球
public static int[] createLuckNums() {
// 定义一个数组用来保存生成的随机数
int[] luckNums = new int[7];
// 初始化随机数类
Random r = new Random();
// 1-6 为红球
for (int i = 0; i < luckNums.length - 1; i++) {
// 随机生成 1-33 的数字
while (true) {
int data = r.nextInt(33) + 1;
boolean flag = true;
for (int j = 0; j < i; j++) {
if (luckNums[j] == data) {
flag = false;
break;
}
}
if (flag) {
luckNums[i] = data;
break;
}
}
}
// 最后一个为蓝球
luckNums[luckNums.length - 1] = r.nextInt(16) + 1;
return luckNums;
}
// 输入不重复的双色球
public static int[] userInputNums() {
int[] userNums = new int[7];
for (int i = 0; i < userNums.length - 1; i++) {
while (true) {
boolean userFlag = true;
System.out.println("==============双色球彩票系统==================");
System.out.println("请输入第" + (i + 1) + "个红球号码 (1-33, 不能重复): ");
int userData = Utility.readInt();
for (int j = 0; j < i; j++) {
// 如果输入的数字在数组中存在 而且数字不符合区间 提示数值输入不符合要求
if (userNums[j] == userData || userData < 1 || userData > 33) {
userFlag = false;
System.out.println("数值输入不符合要求!");
break;
}
}
//如果符合要求将输入的数据加到数组中
if (userFlag) {
userNums[i] = userData;
break;
}
}
}
// 输入最后一个蓝色号码
System.out.println("请输入最后一个蓝球号码 (1-16): ");
//
int end = Utility.readInt();
userNums[userNums.length - 1] = end;
return userNums;
}
public static String judge(int[] luckNums, int[] userNums) {
// 定义红球总数
int redCount = 0;
// 定义篮球总数
int blueCount = 0;
String winString = "";
String result = "";
// 统计红球命中个数
for (int i = 0; i < userNums.length - 1; i++) {
for (int j = 0; j < luckNums.length - 1; j++) {
if (userNums[i] == luckNums[j]) {
redCount++;
break;
}
}
}
// 蓝球是否命中
blueCount = userNums[userNums.length - 1] == luckNums[luckNums.length - 1] ? 1 : 0;
winString = redCount + "+" + blueCount;
System.out.println("中奖号码为: ");
print(luckNums);
System.out.println("投注号码为: ");
print(userNums);
System.out.println("您命中的红球数为: " + redCount);
System.out.println("您命中的蓝球数为: " + blueCount);
System.out.println("您的中奖情况为: ");
// 判断中奖情况
switch (winString) {
case "0+1":
case "1+1":
case "2+1":
result = "六等奖, 获得5元";
break;
case "3+1":
case "4+0":
result = "五等奖, 获得10元";
break;
case "4+1":
case "5+0":
result = "四等奖, 获得200元";
break;
case "5+1":
result = "三等奖, 获得3000元";
break;
case "6+0":
result = "二等奖, 获得500万元";
break;
case "6+1":
result = "一等奖, 获得1000万元";
break;
default:
result = "感谢您为福利事业做出的贡献";
break;
}
return result;
}
// 打印数组内容的方法
public static void print(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");
}
System.out.println("]");
}
}
接收键盘输入类
import java.util.Scanner;
/**
工具类的作用:
处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
*/
public class Utility {
//静态属性
private static Scanner scanner = new Scanner(System.in);
/**
* 功能:读取键盘输入的一个菜单选项,值:1——5的范围
* @return 1——5
*/
public static char readMenuSelection(){
char c ;
for (; ;){
String str = readKeyBoard(1,false);//包含一个字符的字符串
c = str.charAt(0);
if (c!='1'&&c!='2'&&c!='3'&c!='4'&c!='5'){
System.out.println("选择错误,请重新输入:");
}
else break;
}
return c;
}
/**
* 功能:读取键盘输入的一个字符
* @return 一个字符
*/
public static char readChar(){
String str = readKeyBoard(1,false);//读取字符
return str.charAt(0);
}
/**
* 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
* @param defaultValue 指定的默认值
* @return 默认值或输入的字符
*/
public static char readChar(char defaultValue){
String str = readKeyBoard(1,true);//读取结果不是字符就是一个空的字符串
return (str.length()==0)?defaultValue:str.charAt(0);
}
/**
* 功能:读取键盘输入的整型,长度小于2位
* @return 整数
*/
public static int readInt(){
int n;
for(; ;){
String str = readKeyBoard(10,true);//读取一个整数,长度<=10位
try {
n=Integer.parseInt(str);//进行转型,字符转换成整数
break;
}catch (NumberFormatException e){
System.out.println("数字输入的有错误,请重新输入!");
}
}return n;
}
/**
* 功能:读取键盘输入的 整数或默认值,如果直接回车,则返回默认值,否则返回输入的整数
*
* @param defaultValue 指定的默认值
* @return 整数或默认值
*
*/
public static int readInt(int defaultValue){
int n;
for(; ;){
String str = readKeyBoard(10,true);
if (str.equals("")){
return defaultValue;
}
//异常处理
try {
n = Integer.parseInt(str);
break;
}catch (NumberFormatException e){
System.out.println("数字输入的有错误,请重新输入!");
}
}
return n;
}
/**
* 功能:读取键盘输入的指定长度的字符串
* @param limit 限制的长度
* @return 指定长度的字符串
*/
public static String readString(int limit){
return readKeyBoard(limit,false);
}
/**
* 功能:读取键盘输入的指定长度的字符串或默认值,如果直接回车,返回默认值,否则返回字符串
* @param limit 限制的长度
* @param defaultValue 指定的默认值
* @return 指定长度的字符串
*/
public static String readString(int limit,String defaultValue){
String str = readKeyBoard(limit, true);
return str.equals("")? defaultValue : str;
}
/**
* 功能:读取键盘输入的确认选项,Y或N
* 将小的功能,封装到一个方法中.
* @return Y或N
*/
public static char readConfirmSelection(){
System.out.println("请输入你的选择(Y/N)");
char c ;
for(; ; ){
//将接受的字符转换成大写字母
String str = readKeyBoard(1,false).toUpperCase();
c = str.charAt(0);
if (c=='Y'||c=='N'){
break;
}else {
System.out.println("选择有错误,请重新输入!");
}
}
return c;
}
/**
* 功能: 读取一个字符串
* @param limit 读取的长度
* @param blankReturn 如果为true ,表示 可以读空字符串。
* 如果为false表示 不能读空字符串。
*
* 如果输入为空,或者输入大于limit的长度,就会提示重新输入。
* @return
*/
public static String readKeyBoard(int limit,boolean blankReturn){
//定义一个字符串
String line = "";
while (scanner.hasNextLine()){//判断是否有下一行
line = scanner.nextLine();
//如果line.length=0, 即用户没有输入任何内容,直接回车
if (line.length()==0){
if (blankReturn)return line;//如果blankReturn=true,可以返回空串
else continue; //如果blankReturn=false,不接受空串,必须输入内容
}
//如果用户输入的内容大于了 limit,就提示重写输入
//如果用户如的内容 >0 <= limit ,我就接受
if (line.length()<1||line.length()>limit){
System.out.print("输入长度(不能大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}
}
###运行截图