华为在线编程题系列-19-简单错误记录

问题描述:
问题描述

1. 问题涉及知识点.

  • 程序的停止问题(如本题所述,即不知道什么时候结束,只是说每次打印最后八个,所以还是按照一般处理,在最后打印时只是打印容器中最后把即可.)
  • 净文件名:值得就是文件名称.

2. 自己解法.

  • 使用LinkedHashMap 对数据进行存储.
  • 净文件名+" "+行号作为key进行存储,把对应的错误次数作为value.
  • 判断是否含有使用map.containsKey(key)进行判断,如果含有对value进行+1.
  • 此题应该除注意的是 HashMap的输出顺序不一定和输入顺序相同.所以建议使用LinkedHashMap .
package com.chaoxiong.niuke.huawei;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;

public class HuaWei_19_2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Map<String, Integer> map = new LinkedHashMap<String, Integer>();
        while (sc.hasNext()) {
            String str = sc.next();
            int linenum = sc.nextInt();
            // 截取
            str = str.substring(str.lastIndexOf("\\")+1);
            // 算长度
            int len = str.length();
            if(len>16)
                str = str.substring(len-16);
            String key = str+" "+linenum;
            if(map.containsKey(key)){
                map.put(key,map.get(key)+1);
            }else
                map.put(key,1);
        }
       // 打印处理, 如果长度大于8 只打印最后8个.
        int mapSize = map.keySet().size();
         if(mapSize<=8){
             for(String string:map.keySet()){
                 System.out.println(string+" "+map.get(string));
             }
         }else {
             int flag = 1;
             for(String string:map.keySet()){
                 if(flag>mapSize-8){
                     //打印
                     System.out.println(string+" "+map.get(string));
                 }
                 flag += 1;
             }
         }
    }
}

3. 优质答案.

null

4. 本题总结.

再含有键值对的数据处理的时候 map 的优势就很清晰的体现出来.
如果需要保证输入顺序和输出顺序相同需要使用LinkedHashMap.

猜你喜欢

转载自blog.csdn.net/u012222078/article/details/80216504
今日推荐