Как подсчитать частоту всех элементов в нескольких массивах? - PullRequest
0 голосов
/ 18 апреля 2020

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

Например,

[1,2,3, 4]

[1,2,2,4]… 1 поднимается 2 раза, 2 поднимается 3 раза et c

Надеюсь, мой вопрос не слишком запутанный.

Ответы [ 3 ]

2 голосов
/ 18 апреля 2020

Вы можете передать все массивы, выровнять их, а затем сосчитать вхождения:

int[][] allNumbers = ...;

Map<Integer, Long> counts = 
    Arrays.stream(allNumbers)
          .flatMapToInt(Arrays::stream)
          .mapToObj(Integer::valueOf)
          .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
1 голос
/ 18 апреля 2020

Если вы только начали изучать Java, не занимайтесь функциональным программированием, пока не освоите основы. Вот простой способ старой школы сделать это.

Перебирать все массивы и сохранять частоту в HashMap.

public static countFreq(int[] array, HashMap<Integer, Integer> map) {
     for (int element : array) {
         map.put(element, map.getOrDefault(element, 0) + 1);
     }
}

Вызвать вспомогательный метод для подсчета частоты и отображения результатов. .

var map = new HashMap<Integer, Integer>();

countFreq(new int[]{1, 2, 3, 4}, map);

countFreq(new int[]{1, 2, 2, 4}, map);

for (var mapEntry : map.entrySet()) {
   System.out.println(mapEntry.getKey() + " " + mapEntry.getValue());
}

Примечание: этот код предназначен для JDK / JRE 10, поэтому здесь используется var. Если это JDK8 или ниже, вы должны указать тип.

0 голосов
/ 18 апреля 2020

Ваш вариант использования сбивает с толку. Вам нужно найти частоту элементов в массиве массива для каждого массива или из всех массивов.

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

People1: {1 comes up 2, 2 comes up 3 etc.}
People2: ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...