第一次个人编程作业
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
Estimate | 估计这个任务需要多少时间 | 600 | 800 |
Development | 开发 | 200 | 180 |
Analysis | 需求分析(包括学习新技术) | 200 | 240 |
Design Spec | 生成设计文档 | 10 | 10 |
Design Review | 设计复审 | 10 | 10 |
Coding Standard | 代码规范(为开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 20 | 10 |
Coding | 具体编码 | 150 | 240 |
Code Review | 代码复审 | 30 | 60 |
Test | 测试(自我测试,修改,提交修改) | 20 | 30 |
Reporting | 报告 | 20 | 10 |
Test Report | 测试报告 | 20 | 10 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结并提出过程改进计划 | 10 | 10 |
合计 | 1340 | 1670 |
计算模块接口的设计与实现过程
解题思路
- 刚看到这个题目的时候我一头雾水,当初想法是用C++用数组的方式提取信息,后来觉得太过复杂,并没有实践;
- 之后在看到群里大佬们对题目的讨论,第一次出现了“正则表达式”这个词,我就通过网上的一些教程自学了正则表达式,并确定正则表达式为解题的重要部分;
- 本题的关键就是如何在字符串中解析提取各种信息,所以我百度的资料主要是在JAVA从字符串中提取信息的相关解决方法;
- 观察例子可以发现,名字后面为“,”,逗号后面是地址+电话,所以可以通过逗号分隔,主要判断部分还是后面的地址和电话;
- 比较尴尬的一点是我还没有学会如何用json格式输出,所以虽然有具体思路及其解决代码,但是输出并没有符合题目要求。
设计实现过程
- 通过“!”获取第一个字符,也就是难度级别;
- 把原本的字符串按“,”分割,直接获取感叹号后面和逗号前面的字符串作为“姓名”(getName);
- 获取后半部分的电话,并将其在字符串中删掉(getPhone);
- 解析提取剩下字符串中的省、市、区(getAddress)。
改进的思路
- 作为一天速成JAVA的小白,我实在是没能力改进代码/(ㄒoㄒ)/。不过通过网上学习,也勉强能将部分重点代码写出来,存在的问题就是解析地址那部分的正则表达式不够完全,只适用于比较常规的例子,这些有待于我日后学习继续提高。
- 由于编程能力不足,解析获取信息的部分代码学习借鉴了他人博客并按题目要求自己修改,之后我会继续学习JAVA,再次改进。
计算模块部分单元测试展示
(哎,这个实在不会,只能写一写核心代码和测试图了)
代码说明
- 输入的开头为数字加感叹号,获取第一个字符,也就是难度级别:
Object type = input.get(i).subSequence(0, 1);
- 把原本的字符串按逗号分隔,并将感叹号后面,逗号前面的字符作为姓名:
String[] arr = input.get(i).split(",");
if (arr.length == 2) {
String name = arr[0].substring(arr[0].indexOf("!") + 1);
- 获取字符串中的电话,并把电话删掉:
Pattern pattern = Pattern.compile("((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}");
Matcher matcher = pattern.matcher(arr[1]);
String phone = "";
while (matcher.find()) {
phone = matcher.group();
arr[1] = arr[1].replace(phone, "");
}
- 类似的获取地址信息:
String regex = "(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇)?(?<village>.*)";
测试覆盖率截图
计算模块部分异常处理说明
- 部分测试是错误的,原因就是正则表达式写得不够完整,无法解析一些没考虑到的地址,目前能力不足,之后我会修改代码;
- 我自己写了一个转成json格式输出的User包,但是由于刚入门JAVA,不熟练,出现了很多bug,所以我的输出格式不符合要求,这个我之后会继续学习。
心路历程与收获
- 太久没打代码,这次有了思路却又无从下手的感觉,真的很惨!为了做这个题目自学了JAVA,时隔很久再一次接触了代码,又感受到了被代码支配的感觉。
- 自己的代码能力实在是太差了,很多都是借助网上的代码再按题目需求更改,之后的时候我会提高代码能力,改进这次的代码。
- 比较遗憾的还是我对该题目的输入和输出并没有弄懂,虽然过程应该大致符合要求,但是输出的结果却与要求不符,还有就是不是很清楚那个测试。
- 能自己思考做题的思路和方法,条理清晰,思维得到了锤炼。
- 最大的收获应该就是学会了正则表达式,这为以后解决解析获取信息的问题提供了一种重要的方法。