题解 | 简单错误记录
import java.util.Scanner; import java.util.List; import java.util.Optional; import java.util.LinkedList; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 LinkedList<Thing> queue = new LinkedList<>(); while (in.hasNextLine()) { // 注意 while 处理多个 case String a = in.nextLine(); Thing t = new Thing(a); Optional<Thing> optional = queue.stream().filter(e -> e.key.equals(t.key)).findFirst(); if(optional.isPresent()) { optional.get().add(); } else { queue.push(t); } } int a = 0; LinkedList<Thing> result = new LinkedList<>(); while(!queue.isEmpty()){ result.push(queue.pop()); if(result.size() == 8) { break; } } while(!result.isEmpty()) { System.out.println(result.pop().format()); } } public static class Thing { public String key; public int num; public Thing(String a) { String k = a.substring(a.lastIndexOf("\\") + 1); String m = k.substring(0, k.lastIndexOf(" ")); if (m.length() > 16) { k = k.substring(k.lastIndexOf(" ") - 16); } this.key = k; this.num = 1; } public void add() { this.num ++; } public String format() { return key + " " + num; } } }
考察数据结构的运用,程序要求输出最后的8条记录,考虑试用栈先进后出的特性,试用第一个栈存储文件名和错误次数,存储后,从第一个栈出栈 执行数量入结果栈 依次打印