用java集合框架编写程序统计输入数字的频率
编写一个程序,读取个数不定的整数,然后查找其中出现频率最高的数字,当输入0时,表示结束输入,例如,如果输入的数据是
2 3 40 3 5 4 -3 3 3 2 0 ,那么数字3的出现频率是最高的。请一次输入一个数字。如果出现频率最高的数字不止一个而是多个,则应该将它们全部输出。例如,在线性表9 30 3 9 3 2 4 0,3和9都出现了两次,所以,3和9都应该被报告。
[解决办法]
for example
Map<Integer, Integer> map = new HashMap<Integer, Integer>();Scanner sc = new Scanner(System.in);int num = 0;while (true) { System.out.printf("please input a number([0] to exit): "); try { num = Integer.parseInt(sc.nextLine()); if (num == 0) break; } catch (Exception e) { System.out.println("error input, input again."); continue; } if (map.containsKey(num)) { map.put(num, map.get(num)+1); } else { map.put(num, 1); }}List<Entry<Integer, Integer>> list = new ArrayList<Entry<Integer, Integer>>(map.entrySet());Collections.sort(list, new Comparator<Entery<Integer, Integer>>() { compare(Entry<Integer, Integer> e1, Entry<Integer, Integer> e2) { return e2.getValue().compareTo(e1.getValue()); }});int max = list.get(0).getValue();for (EntrySet<Integer, Integer> e : list) { if (e.getValue() == max) { System.out.printf("num=%d, times=%d\n", e.getKey(), e.getValue()); }}