这个作业属于哪个课程 | 软工二班 |
---|---|
这个作业要求在哪里 | 编程作业 |
这个作业的目标 | 学习码云 |
学号 | 20188445 |
文章主体
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20m | 15m |
• Estimate | • 估计这个任务需要多少时间 | 24h | 42h |
Development | 开发 | 35m | 40m |
• Analysis | • 需求分析 (包括学习新技术) | 78m | 90m |
• Design Spec | • 生成设计文档 | 30m | 40m |
• Design Review | • 设计复审 | 55m | 60m |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 20m | 35m |
• Design | • 具体设计 | 42m | 30m |
• Coding | • 具体编码 | 50m | 56m |
• Code Review | • 代码复审 | 30m | 35m |
• Test | • 测试(自我测试,修改代码,提交修改) | 20m | 30m |
Reporting | 报告 | 20m | 22m |
• Test Repor | • 测试报告 | 15m | 20m |
• Size Measurement | • 计算工作量 | 50m | 90m |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10m | 15m |
合计 | 3095m | 3500m |
解题思路描述
当我看到作业的时候第一反应是啥也不会,虽然好像有挺长时间的,但是因为看不懂题目要做什么觉得很慌,但是觉得老师既然这么布置肯定认为我们绝大多数人在这段时间内可以完成新技术的学习和作业的完成,所以我便开始完成作业的规划。首先先看一下不会的技术,包括Git、Github、单元测试、性能分析、PSP表格、参数处理……技术学习后,决定用Java进行项目的开发,首先想到的是在main函数打开文件并传入几个模块中包括统计字符数、统计行数、统计单词数、统计词频。对于统计词频需要单词和数据的映射,第一时间考虑到HashMap,并搜查了资料了解其对应的有关函数并照着类似的代码打了一遍。
代码规范
代码风格请参考
代码规范
计算模块接口的设计与实现过程
项目src目录包括2个java文件,其中Lib里包含Lib与CountData两个类。WordCount作为主函数,Lib作为工具类存放程序需要的功能。
其中 WordCount类用于存储文件单词数、行数、字符数应用到下列函数。
除主函数外,
包括docheck函数对每一行进行分析,
public static void doCheck(File inputFile) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile)));
String line = null;
while(null!=(line=br.readLine())){
incrLine();
// 分析每一行。
analysis(line);
}
}
show函数对每一行进行排序,
public static void show(){
Set<Map.Entry<String, Integer>> entries = wordCount.entrySet();
// 排序
ArrayList<String> words = new ArrayList<>();
for (Map.Entry<String, Integer> entry : entries) {
words.add(entry.getValue()+"#"+entry.getKey());
}
// 排序
Collections.sort(words);
words.forEach(obj->{
String[] split = obj.split("#");
String str = split[1]+": "+split[0];
System.out.println(str);
});
}
incrline函数作业是行数加一,
public static void incrLine(){
// 行数加1
count++;
}
obtainTotaWords计算总单词数,
public static long obtainTotalWords(){
long sum = 0;
Set<Map.Entry<String, Integer>> entries = wordCount.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
sum+=entry.getValue();
}
return sum;
}
analysis得到每一个单词以及次数记录到Map集合中去。
public static void analysis(String line){
String [] words = line.split(" ");
for(int i=0;i<words.length;i++){
String word = words[i].trim();
word = word.toLowerCase();
word = word.contains(",")||word.contains(".")?word.substring(0,word.length()-1):word;
if(word.length()>=4&&isWord(word.substring(0,4))){
if(wordCount.containsKey(word)){
Integer count = wordCount.get(word);
count++;
wordCount.put(word,count);
}else{
wordCount.put(word,1);
}
}
}
}
计算模块部分单元测试展示。
intput文本文档:
命令截图:
output截图:
计算模块部分异常处理说明。
WordCount.class文件位置找错,导致到不主类,尴尬
心路历程与收获。
一开始是不打算从事it行业的,但是现实是残酷的,经过各种思考,还是选择从头开始,选择培训机构进行Java培训,于本次的作业来讲,利用了gitee码云和本地仓库的连接,以及用IDEA编译工具进行,从大一学过gitee后,后面很久就没接触了,到现在看来还是很空白的,idea还是在培训课上过了一遍,然后这次这些内容重新搬出来用一遍,一开始,还是遇到很多问题的,比如:本地仓库和远程仓库连接失败,Idea文件push失败的问题,有些问题其实就是一个简单的文件位置不对,就导致整个流程实现不了。说到底,这方面的工作做的太少了,现在平时的积累非常重要,还是吃了懒虫的亏呀~