思路💡
⭐简化题意:记录题目所给的整数中每个数字出现的次数,按照数字大小的升序(0 ~ 9)输出他们的出现次数
⭐
- “记录每个数字以及它们对应的次数”,这里应该不难想到用
Map
以键值对的形式存储
如何按照数字升序输出它们各自的出现次数呢?🤔
- 把出现的数字用一个
List
存储起来,并借助Collections.sort()
方法升序排列所有出现过的数字;- 在遍历排序后的
List
的同时再通过Map.get()
方法得到对应的出现次数,这样就可以升序输出数字及它们对应的出现次数了~- 当然,你不能重复存储。因此,在存储之前你还需要判断一下当前这个数字出现过没有(这里可以借助
Map
的containsKey()
方法来实现),没有出现过你才能把它存到List
里去。
细节处理
- 遍历读取到的字符串时,我们通过String.charAt()方法得到的是char类型,如果直接输出,我们得到的是这个char型变量的ASCII码,因此我们需要减去49(因为数字1对应的ASCII码是49)后再输出
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
Map<Integer, Integer> map = new HashMap<>();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < s.length(); ++i) {
boolean flag = false;
int c = Integer.valueOf(s.charAt(i)) - 48;
if (map.containsKey(c)) {
flag = true;
map.put(c,map.get(c) + 1);
} else map.put(c, 1);
if(!flag)list.add(c);
}
Collections.sort(list);
for (int i : list) {
System.out.println(i+":"+map.get(i));
}
}
}