编写一个程序,读取个数不定的整数,然后查找其中出现频率最高的数字,当输入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都应该被报告。

解决方案 »

  1.   

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

  2.   

    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());
        }
    });
    我java学的不太好,这段代码我有点晕,你能解释一下吗
      

  3.   


    看下API,这里就是对map的迭代和Collections工具类提供的sort排序方法