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

博主通过编写JAVA程序生成双色球随机号码,遇到在特定环境下出现重复数字的问题。经过研究发现,问题出在`redBall.remove(tmp)`,由于`tmp`是`Integer`类型而非`int`,导致了错误的元素被移除。解决方案是将`tmp`转换为`int`类型。博主从这次经历中认识到自我检查的重要性,并分享了程序供他人参考和改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

选择号码是个麻烦的事情。于是乎用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型即可。!==,这下丢人丢大发了,直接丢出国门了。@@.

 

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

 

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

 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值