当前位置:编程学习 > JAVA >>

JAVA课程设计 彩票号码产生器

如题

补充:用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的回调机制

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,