我正在写这个小彩票应用程序。 现在的计划是,计算在每次彩票迭代期间每个数字的抽取频率,并将其存储在某个地方。 我的猜测是我需要使用一个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));
}
也许有人可以告诉我,我是否有正确的想法,或者甚至是如何正确实施地图?
答案 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);
虽然我不知道你想在这里完成什么。不需要对元素进行计数,因为无法多次检索数字。这是因为你丢弃了从你在开头创建的列表中“绘制”的任何数字。