Как посчитать количество каждого номера, нарисованного в лотерее, и вывести его в список? - PullRequest
0 голосов
/ 01 июня 2010

Я пишу эту маленькую заявку на участие в лотерее. Теперь план состоит в том, чтобы посчитать, как часто каждый номер выпадал во время каждой итерации лотереи, и сохранить это где-нибудь. Я предполагаю, что мне нужно будет использовать HashMap, который имеет 6 ключей и увеличивает значение на единицу каждый раз, когда рисуется соответствующий номер ключа. Но как мне это сделать? Мой код пока:

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 ]

4 голосов
/ 01 июня 2010

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 голос
/ 01 июня 2010

Да, хэш-карта - это хорошая идея для хранения такой информации.

Хеш-карта с целочисленными значениями в виде ключа выглядит странно. В этом конкретном случае я бы предпочел простой целочисленный массив и увеличивать элемент, соответствующий нарисованному шару.

Я бы проверил твою логику для рисования шаров из бассейна. Я думаю, что метод get не делает то, что вы ожидаете. Возможно, использование набора для numPool и удаление выбранных шаров подходит ближе.

0 голосов
/ 01 июня 2010
hashMap.put(nums[i], hashMap.get(nums[i])+1);

Хотя я понятия не имею, чего вы здесь пытаетесь достичь. Нет необходимости в подсчете элементов, так как нет способа получить число более одного раза. Это потому, что вы выбрасываете любое число, которое вы «рисуете» из списка, который вы создали в начале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...