一个双色球模拟程序引发的思考

    技术2026-05-14  4

    本人偶尔会去买注双色球,使自己不致于失去最后一丝发财的梦想。~~

    选择号码是个麻烦的事情。于是乎用JAVA写了一个双色球随机号程序。代码如下:

     

    package com.mainone.util;

    import java.util.ArrayList;import java.util.List;import java.util.Random;

    /** * @author 武广阔

     * @date:2011-1-17 上午10:13:08 * @version : *  */public class CoupleColorBall {

     /**  * @param args  */ public static void main(String[] args) {  List<Integer> redBall = new ArrayList<Integer>();  for(int i=1; i<=33; i++){   redBall.add(new Integer(i));  }    List<Integer> blueBall = new ArrayList<Integer>();  for(int i=1; i<=16; i++){   blueBall.add(new Integer(i));  }    List<Integer> redResult = new ArrayList<Integer>();  for(int i=0; i<6; i++){   try {    Thread.sleep(15000);    Random rd = new Random();    Integer tmp = rd.nextInt(redBall.size());    redResult.add(redBall.get(tmp));    redBall.remove(tmp);       } catch (InterruptedException e) {    e.printStackTrace();   }  }      try {   Thread.sleep(20000);  } catch (InterruptedException e) {   e.printStackTrace();  }  Integer blueResult = blueBall.get(new Random().nextInt(16));    System.out.println(redResult);    System.out.println(blueResult); }

    }

    一开始运行是没有问题的,后来用我的宏基本本(CPU:I3 370M)运行,把Thread.sleep后边数值修改得大了一些,在redResult中发现了重复的数字。找问题呗,找不到问题出在哪里。于是乎就开始猜想:是不是JDK在我的双核四线程CPU上运行Thread.sleep会出问题。

    于是就煞费苦心地去Oracle官网上提交了一个BUG,又煞费苦心地在上边发表了一篇英文帖子。

     

    还好有人能看懂我发的英文帖子,还给回复了——我的英文还不是太烂哦,哈哈!。

    发现问题出在这里:redBall.remove(tmp);这里的tmp是Integer类型的,remove接收一个Object类型时,会到list里删除这个Object,而这里真正的意图是,删除掉指定索引对应的对像。将tmp强制转换成int型即可。!==,这下丢人丢大发了,直接丢出国门了。@@.

     

    看来以后发现问题,还得多从自身找原因啊。

     

    最后欢迎各位使用本程序或修改后的程序去购买彩票。——在程序员的道路上共同进步。

     

     

    路漫漫其修远兮,吾将上下而求索。

    最新回复(0)