就是意义对应的关系,通过一个值可以得到另一个的值。
对于那个小练习,我做了一个差不多的,就是结果打印的显示方式不同。
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Set;
- /*
- * 要求:接收任意一串输入,统计每个字符出现的次数。count统计 rate频率
- * 分析:实际上要我们统计的是两个量,一个是哪个字符出现过,还有就是它出现了几次,
- * 而且这两个量是对应存在的,可以用map集合来解决此问题。字符做键,出现次数做值。
- * 步骤:
- * 1,接收控制台输入,遍历获取字符串单个字符 char charAt(int x)
- * 2,创建HashMap的实例,在对字符串遍历中按条件将字符作为键存入集合中
- * (1)判断单个字符是否在集合的键中存在,如果存在,将键值对应值+1 boolean containsKey(Object key)
- * (2)如果不存在,将字符直接存入集合
- */
- public class CountRate {
- public static void main(String[] args) {
- System.out.println("请输入:");
- try {
- show(getRate(getIn()));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- // 定义一个功能,获取控制台输入
- static String getIn() throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- return br.readLine();
- }
- // 此功能统计字符串中单个字符和出现的次数
- static HashMap<Character, Integer> getRate(String str) {
- // 创建一个HashMap集合
- HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
- for (int i = 0; i < str.length(); i++) {
- char ch = str.charAt(i);
- // Integer num = hm.get(ch);
- // hm.put(ch, num == null ? 1 : num + 1);
- // 判断单个字符是否在集合的键中存在
- if (!hm.containsKey(ch)) {
- // 集合中的键上没有此字符
- hm.put(ch, 1);
- } else {
- // 如果存在,在次存入,将键对应的值+1
- hm.put(ch, hm.get(ch) + 1);
- }
- }
- return hm;
- }
- // 用来显示出现过的字符和出现次数
- static void show(HashMap<Character, Integer> hm) {
- // 取元素keySet()
- Set<Character> set = hm.keySet();
- System.out.println("统计结果如下:");
- // 遍历set集合,取出原来集合中的键
- for (Iterator<Character> it = set.iterator(); it.hasNext();) {
- char ch = it.next();
- int rate = hm.get(ch);
- System.out.println(ch + "出现了" + rate + "次。");
- }
- }
- }
复制代码 |