202103226-1 编程作业
这个作业属于哪个课程 | 软工-2018级计算机二班 |
---|---|
这个作业要求在哪里 | 202103226-1 编程作业 |
这个作业的目标 | 代码规范,熟悉git和码云的使用 |
学号 | 20188434 |
其他参考文献 | 腾讯C++代码规范 |
目录
gitee仓库地址
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟 | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 30 |
Estimate | 估计这个任务需要多少时间 | 2880 | 5760 |
Development | 开发 | 30 | 60 |
Analysis | 需求分析 (包括学习新技术) | 20 | 60 |
Design Spec | 生成设计文档 | 100 | 50 |
Design Review | 设计复审 | 20 | 60 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 60 |
Design | 具体设计 | 100 | 200 |
Coding | 具体编码 | 200 | 200 |
Code Review | 代码复审 | 20 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | 150 | 100 |
Test Repor | 测试报告 | 50 | 60 |
Size Measurement | 计算工作量 | 80 | 60 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 120 |
合计 | 900 | 1150 |
解题思路描述
filereader和filewriter读写的使用,然后划分出三个功能,一个用来统计字符,一个用来统计行数,一个来进行单词总数和单词词频的统计。
代码规范指定链接
设计与实验过程
统计字符数,按字符流的形式来读取文件并将总数返回
public int CountChar(String inpath) {
File file = new File(inpath);
int i = 0;
try {
String name = file.getName();
System.out.println("File:" + name);
FileReader fr = new FileReader(file);
BufferedReader bufr = new BufferedReader(fr);
while(((char) bufr.read()) != (char)-1){
i++;//按字符读取文本内容
}
bufr.close();
fr.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return i;
}
统计行数,只要文件还有行就读下去并将计数值+1,并将行数返回
public int CountLine(String inpath){
File file = new File(inpath);
int i = 0;
try {
String name = file.getName();
System.out.println("File:" + name);
FileReader fr = new FileReader(file);
BufferedReader bufr = new BufferedReader(fr);
while (bufr.readLine() != null) {
i++;
}
bufr.close();
fr.close();
} catch (Exception e) {
e.printStackTrace();
}
return i;
}
这些单词进行匹配,符合前4位都为英文字符的放置与map中,若是初次匹配成功则值位1,之后加1,之后进行排序并且同时进行单词总数的统计用sum变量保存
int sum=0;
String regex = "[a-zA-Z]{4,}[a-zA-Z0-9]*";
for(String word :words) {
if (word.matches(regex)) {
if (map.get(word) == null) {
map.put(word, 1);
sum++;
} else {
map.put(word, map.get(word) + 1);
sum++;
}
}
}
通过List的大小得出单词种类数,若单词数目不够10种时则就把这些词频数据都输出,还有list储存的单词词频内容连同传进来的characters和lines值一起输出到目标文件
FileWriter out = new FileWriter(outpath);
int n = list.size();
out.write("characters:"+charNum+"\n");
out.write("words:"+sum+"\n");
out.write("lines:"+lineNum+"\n");
if (n>10){
n=10;
}
for (int i = 0; i < n; i++) {
out.write(list.get(i).getKey()+":"+list.get(i).getValue()+"\n");
}
计算模块接口部分的性能改进
个人能力有限,尝试过但是目前无法明显改进性能
单元测试
异常处理说明
有个小问题还没处理,就是统计词频的部分,统计出来的单词都是乱序,不是正确的单词顺序,时间有限这个问题目前还没处理好
心路历程与收获
这次作业对我来说还是很有难度的,所以为了完成这次作业,我问了身边很多同学,学习了很多以前不知道知识,让我更加熟悉了码云的使用,用git上传代码到码云以及eclipse连接码云等,同时也提升了自己的编程能力,这次应该算是这学期第一次码代码吧,也是很久没码代码了,很多用法都有些生疏了,再一次巩固了自己的编程知识,这次作业还是受益匪浅的。