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;

}

}