JAVA课程设计 彩票号码产生器
我这有个超级大乐透的代码在控制台输出的 还没有统计奖项概率 希望可以帮到你 :1.先说下思路 a.声明2个数组和2个变量数组分别放前区的35个数和后区的12个数,变量分别为这两个数组的长度 b.首先随机获得前区的5个号码:Random .nextInt(前区长度的变量) 获得随机数,找到第一个数组中下标为这个随机数的元素,取出放在变量中. 这 儿可以判断格式 的.可以用正则表达式判断是否为各位数,如果是的话就补全0.然后移除数组中这个元素.当然存储数组的变量要减去1的然后重复 以上的4次这样就获得了1-35中5个不重复的数字. c.同上. 2.附代码SuperJoyful.javaimport java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/**
* 以下是模拟一个超级大乐透随机选号功能,严格按概率生成
* @author Jack
*
*/
public class SuperJoyful {
// 声明一个List用于存放前区号码
private List<Integer> objFrontList = new ArrayList<Integer>();
// 声明一个List用于存放后区号码
private List<Integer> objBackList = new ArrayList<Integer>();
// 声明一个正则表达式对象,用于匹配是否是一位数字,用于输出时验证
Pattern objP = Pattern.compile("\\d");
// 所要操作的字符串
Matcher objM = null;
String[] Front = new String[5];
String[] Back = new String[2]; // 初始化摇奖号码
public void init() {
for (int i = 1; i <= 35; i++) {
objFrontList.add(i);
}
for (int i = 1; i <= 12; i++) {
objBackList.add(i);
}
} // 开始摇奖
public void beginLottery() {
Random objRandom = new Random();
int nFrontCount = 35; // 前区号码总数
int nBackCount = 12; // 后区号码总数 // 摇奖前先清空LIST,再初始化
objFrontList.clear();
//System.out.println(objFrontList);
objBackList.clear();
//System.out.println(objBackList);
this.init();
/**
* 产生5个前区号码
*/
for (int i = 0; i < 5; i++) {
//System.out.println("nFrontCount:"+nFrontCount);
// 初始时有35个前区号,随机产生一个索引
int nIndex = objRandom.nextInt(nFrontCount);
// 将选出的号码暂时存放在变量中,带正则表达式验证
int nTemp = objFrontList.get(nIndex);
String strTemp = new Integer(nTemp).toString();
// 将获得的号码与正则表达式匹配
objM = objP.matcher(strTemp);
boolean flag = objM.matches();
// 如果是一位数,则在前面补零
if (flag) {
Front[i] = ("0" + strTemp + " ");
} else {
Front[i] = (strTemp + " ");
}
// 删除LIST中该索引处的号码,因为选出一个就不再放回
objFrontList.remove(nIndex);
// 号码总数减少一个
nFrontCount--;
}
Arrays.sort(Front);
for (int n = 0; n < Front.length; n++) {
System.out.print(Front[n] + "\t");
}
System.out.print("+ ");
/**
* 产生2个后区号码
*/
for (int i = 0; i < 2; i++) {
//System.out.println("nBackCount:"+nBackCount);
// 初始时有12个后区号,随机产生一个索引
int nIndex = objRandom.nextInt(nBackCount);
// 将选出的号码暂时存放在变量中,带正则表达式验证
int nTemp = objBackList.get(nIndex);
String strTemp = new Integer(nTemp).toString();
// 将获得的号码与正则表达式匹配
objM = objP.matcher(strTemp);
boolean flag = objM.matches();
// 如果是一位数,则在前面补零
if (flag) {
Back[i] = ("0" + strTemp + " ");
} else {
Back[i] = (strTemp + " ");
}
// 删除LIST中该索引处的号码,因为选出一个就不再放回
objBackList.remove(nIndex);
// for(int n = 0; n<objBackList.size();n++){
// System.out.println("objBackList:"+objBackList.get( n ));
// }
// 号码总数减少一个
nBackCount--;
}
Arrays.sort(Back);
for (int n = 0; n < Back.length; n++) {
System.out.print(Back[n] + "\t");
}
// 产生一注后回车
System.out.println("");
} // 按要求输出多少注彩票
public void outPutLottery(int vnCount) {
for (int i = 0; i < vnCount; i++) {
this.beginLottery();
}
} /**
* @param args
*/
public static void main(String[] args) {
SuperJoyful objSJ = new SuperJoyful();
EnterConsole objEC = new EnterConsole();
// 声明一个正则表达式对象,用于匹配是否是数字
Pattern objP = Pattern.compile("\\d{1,}");
// 所要操作的字符串
Matcher objM = null;
// 接收控制台输入
String objTemp = (String) objEC.printConsole();
//String strTemp = (String)objTemp;
objM = objP.matcher(objTemp);
boolean flag = objM.matches();
int nTemp = 0;
if (flag) {
nTemp = new Integer(objTemp);
} else {
System.out.println("对不起,只能输入数字!");
}
objSJ.outPutLottery(nTemp);
}
}EnterConsole.javaimport java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class EnterConsole
{
public Object printConsole(){
System.out.print("请输入你要随机选取多少注,确认回车即可:");
BufferedReader objBR = new BufferedReader(new InputStreamReader(System.in));
String strValue = null;
try
{
strValue = (String)objBR.readLine();
}
catch ( IOException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return strValue;
}
}