编写一个程序,读取个数不定的整数,然后查找其中出现频率最高的数字,当输入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都应该被报告。
2 3 40 3 5 4 -3 3 3 2 0 ,那么数字3的出现频率是最高的。请一次输入一个数字。如果出现频率最高的数字不止一个而是多个,则应该将它们全部输出。例如,在线性表9 30 3 9 3 2 4 0,3和9都出现了两次,所以,3和9都应该被报告。
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());
}
}
Collections.sort(list, new Comparator<Entery<Integer, Integer>>() {
compare(Entry<Integer, Integer> e1, Entry<Integer, Integer> e2) {
return e2.getValue().compareTo(e1.getValue());
}
});
我java学的不太好,这段代码我有点晕,你能解释一下吗
看下API,这里就是对map的迭代和Collections工具类提供的sort排序方法