简单错误记录
题目描述
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加;
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。
输入描述:
一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。
输出描述:
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:
输入例子:
E:\V1R2\product\fpgadrive.c 1325
输出例子:
fpgadrive.c 1325 1
思路1:(有问题,通过10%)
首先对要统计次数,然后对统计次数后的对象进行稳定排序,最后是输出时记得检查文件名的长度
重点:自定义类,并自定义比较规则
MyObject类,包括文件名和错误行号的字符串,错误统计次数
import java.util.*; class MyObject implements Comparable<MyObject>{//自定义的类,并自定义比较规则 String nameNo;//文件名和错误行号的字符串 int count;//错误统计次数 public int compareTo(MyObject o){ return o.count-this.count; } public MyObject(String nameNo,int count){ super(); this.nameNo=nameNo; this.count=count; } public String getNameNo(){ return nameNo; } public void setNameNo(String nameNo){ this.nameNo=nameNo; } public int getCount(){ return count; } public void setCount(int count){ this.count=count; } } public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); ArrayList<MyObject> ob=new ArrayList<MyObject>(); while(sc.hasNext()){ String line=sc.nextLine(); String nameNo=line.trim().substring(line.trim().lastIndexOf("\\")+1);//文件名和行号 boolean flag=false; for(int j=0;j<ob.size();j++){ if(ob.get(j).getNameNo().equals(nameNo)){//存在 MyObject temp=ob.get(j); temp.setCount(temp.getCount()+1); ob.set(j,temp); flag=true; break; } } if(flag==false){//不存在 MyObject o=new MyObject(nameNo,1); ob.add(o); } }//数据处理完毕 Collections.sort(ob);//稳定排序 int coun=0; while(coun<8&&coun<ob.size()){ String[] temp=ob.get(coun).getNameNo().split(" "); String filename=temp[0].substring(temp[0].lastIndexOf("\\")+1); if(filename.length()>16) filename.substring(filename.length()-16); System.out.println(filename+" "+temp[1]+" "+ob.get(coun).getCount()); coun++; } } }
思路2:
所谓 “记录最多8条错误记录,循环记录”,就是输出 map 最后8个元素//纯粹的考代码实现能力//记录个数,故使用Map,不需要排序故使用HashMap,根据题意是要循环输出,而且提交一次会有测试用例提示,需要按照输入顺序输出,故使用LinkedHashMap//在输出的时候,题目的意思是循环八个,但问题是必须记录全部错误个数,否则刚记录完后弹出了,错误数就对不上了,跟操作系统里的缺页有那么点相似。import java.util.LinkedHashMap; import java.util.Map; import java.util.Scanner; public class Main{ 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(); String[] arr=str.split("\\\\"); //根据\切割 String s=arr[arr.length-1]; if(s.length()>16) //截取 s=s.substring(s.length()-16); String key=s+" "+linenum; int value=1; if(map.containsKey(key)) map.put(key, map.get(key)+1); else { map.put(key, value); } } int count=0; for(String string:map.keySet()){ count++; if(count>=(map.keySet().size()-8)) //输出最后八个记录 System.out.println(string+" "+map.get(string)); } } }

浙公网安备 33010602011771号