日期:2014-05-20  浏览次数:20725 次

用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
Java code
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());
    }
}