JAVA课程设计 彩票号码产生器
如题
补充:用Applet用于模拟产生这种彩票的随机号码, 使用你的彩票号码产生器来产生大量的号码与真实的开奖号码相比,统计各个奖项的概率.
改进彩票号码产生器实现提高中奖概率的策略.
追问:以官方公布的开奖结果统计获奖的概率(重复次数>=1000),要怎么做
如题
补充:用Applet用于模拟产生这种彩票的随机号码, 使用你的彩票号码产生器来产生大量的号码与真实的开奖号码相比,统计各个奖项的概率.
改进彩票号码产生器实现提高中奖概率的策略.
追问:以官方公布的开奖结果统计获奖的概率(重复次数>=1000),要怎么做
答案:我这有个超级大乐透的代码在控制台输出的 还没有统计奖项概率 希望可以帮到你 :1.先说下思路
a.声明2个数组和2个变量数组分别放前区的35个数和后区的12个数,变量分别为这两个数组的长度
b.首先随机获得前区的5个号码:Random .nextInt(前区长度的变量) 获得随机数,找到第一个数组中下标为这个随机数的元素,取出放在变量中. 这 儿可以判断格式 的.可以用正则表达式判断是否为各位数,如果是的话就补全0.然后移除数组中这个元素.当然存储数组的变量要减去1的然后重复 以上的4次这样就获得了1-35中5个不重复的数字.
c.同上.
2.附代码
SuperJoyful.java
import 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--;
&n
上一个:求 JAVA 字符串匹配 完美算法
下一个:什么是java的回调机制