如何计算彩票中绘制的每个数字的数量并将其输出到列表中?

时间:2010-06-01 16:14:15

标签: java hashmap

我正在写这个小彩票应用程序。 现在的计划是,计算在每次彩票迭代期间每个数字的抽取频率,并将其存储在某个地方。 我的猜测是我需要使用一个HashMap,它有6个键,每次绘制相应的键号时,该值都会增加1。 但是我怎么做到这一点? 到目前为止我的代码:

public void numberCreator()
{
    // creating and initializing a Random generator
   Random rand = new Random();
   // A HashMap to store the numbers picked. 
   HashMap hashMap = new HashMap();
   // A TreeMap to sort the numbers picked.
   TreeMap treeMap = new TreeMap();

    // creating an ArrayList which will store the pool of availbale Numbers
    List<Integer>numPool = new ArrayList<Integer>();

    for (int i=1; i<50; i++){
    // add the available Numbers to the pool
    numPool.add(i); 
    hashMap.put(nums[i], 0);
    }

    // array to store the lotto numbers
    int [] nums = new int [6];

    for (int i =0; i < nums.length; i++){
    int numPoolIndex = rand.nextInt(numPool.size());
    nums[i] = numPool.get(numPoolIndex);

    // check how often a number has been called and store the new amount in the Map
    int counter =  hashMap.get

    numPool.remove(numPoolIndex);
    }

    System.out.println(Arrays.toString(nums));

    }

也许有人可以告诉我,我是否有正确的想法,或者甚至是如何正确实施地图?

3 个答案:

答案 0 :(得分:4)

HashMap或任何类型的地图在这里太复杂了。计算数字出现次数所需的只是一个数组。

假设您有49个可能的数字,请声明一个数组:

int counts = new int[49];
Arrays.fill(counts,0);

然后为每个抽签做:

int drawnumbers[6]; // put the numbers for this draw in the array
for (int i=0;i<6;++i) {
  counts[drawnumbers[i]-1]++;
}

最后打印结果:

for (int i=0;i<49;++i) {
  System.out.println("Number "+(i+1)+" occurred "+counts[i]+" times.");
}

答案 1 :(得分:1)

是的,散列图是保存此类信息的好主意。

作为键值连续整数的散列图感觉很奇怪。在这个特定情况下,我更喜欢一个简单的整数数组,并增加与绘制球相对应的元素。

我会检查你从池中抽球的逻辑。我认为get方法不会按照您的预期执行。也许使用一个用于numPool的Set并移除所选择的球更接近。

答案 2 :(得分:0)

hashMap.put(nums[i], hashMap.get(nums[i])+1);

虽然我不知道你想在这里完成什么。不需要对元素进行计数,因为无法多次检索数字。这是因为你丢弃了从你在开头创建的列表中“绘制”的任何数字。