華為線上程式設計題系列-19-簡單錯誤記錄
阿新 • • 發佈:2019-01-04
問題描述:
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
.