虽然第一个Project还有点小问题需要修改,但是大体已经差不多了,先把blog记在这里,算是开博第一篇吧!
1.项目预计的用时
本来看到这个题的时候想的并不多,但是看了老师的要求才觉得如此麻烦ORZ……尤其是动不动出现的o points更是吓得我认认真真的把老师的要求读了好几遍,可怜我一个英语这么差的人真不容易……
项目要求要用C#或者C++,这两个语言我都是略懂,但是有些用法还是不了解的,因此:
-计划学习C#+百度一些用法的时间:2小时
-项目本身打算写两个类,一个是遍历搜索文件夹的,另外一个用来统计单词的。感谢上学期OO的吴际老师,我上学期Java写的遍历文件夹的代码还能拿来用,因此这部分计划用时:2小时
-另外一个统计单词的类就要相当于要重新写了,不过考虑到也就是正则表达式然后再提取的问题,也没做多想,计划用时:4小时
2.项目实际用时
说起来这都是泪啊!!!真正写起来我才发现老师的要求多么让我想跪!我整个一天坐立不安,心绪不宁,一会儿实在写不下去上床睡一会一睡就是2个多小时,一会儿在苦思冥想Extended Mode的算法一个人大晚上坐在绿园边上啃着烧饼夹里脊!最最坑爹的一件事情是,到了晚上,我都已经写完了,然后一个同学来问我问题,我才发现我看的是老师去年的要求!今年和去年的这部分完!全!不!一!样!!天哪,想死的心都有了。所幸,我在读了今年的要求以后,发现好像比去年的要简单了(去年那段代码我还没删呢都是泪啊!……
于是实际用时是:
-学习和C#和百度相关内容:估计花了预计的2小时吧……相关网页一直都没关,不过这个时间是离散的,基本都是有什么问题不会才百度然后查找解决方案。
-完成遍历文件夹的类:2小时左右。本来觉得只是修改一下Java的代码应该比较容易,因为以前也做过从C#移植到Java的工作,结果坑爹的是发现C#的File类完全没有Java的好用,于是学习了一下C#这方面的操作方法(吐槽:Directory和File属于两类还真是好难用啊……
-完成统计单词的类:12+小时…… 先不说在这部分坑了一下把题看错了耽误了多少时间,关于正则表达式的构建也够麻烦……本来想的是很简单的就像老师描述的那样构建,后来发现123file这种情况表达式会把file当成一个单词提取出来,问了老师老师说不行T T 为了不得o points还得苦思冥想解决办法,来来回回试着改了好几次正则表达式还是被MatchCollection这个非重叠匹配坑了,于是只好回归最简单的解决方法……如果小伙伴们有好的正则表达式麻烦告诉我下。
还有就是我用的是System.Linq进行的排序,这个默认的字典序排出来真的是字典的样子,不是按照ASCII来的也是跪了= =问了老师也不知道行不行老师还没回复……不行还得改……
3.项目的表现和性能的分析
这是VS2012分析出来的结果,其实我也看不太懂还在研究中……
需要一提的是我在思考算法的时候就觉得哈希表很好用(对于频繁查找单词只有O(1)的复杂度确实很理想),于是就采用了Dictionary这个哈希表的结构,再加上排序什么的都用了Linq内置的方法,因此感觉性能上还可以。我曾经试图让其扫描VS2012的安装文件夹(3G大),用时是1min25sec,统计的结果是1.06M,应该还可以提高的吧!只是我现在还没有做什么性能优化的工作,如果以后做了再补上这里。
4.项目的测试样例
测试样例基本就是按照老师给的那些tips构造了一些txt文件,尤其是那些关键点比如“File""file""FILE"这种,还有分隔符的那些情况。剩下的就是复制了老师blog(……),然后拉了一些项目的文件夹进来。下面是一些测试结果的截图,文件太长了只挑了一部分。
至于我怎么确保自己的程序是正确的,实话说我也不能确保自己的程序是正确的……软件的测试就是靠自测和用户的测试然后不断反馈bug进行修复,自测方面一些比较简短的文件我就自己统计一下出现次数,长的就没办法了。用户测试就依靠和同学们相互测试样例然后对照答案了。
5.学到了什么
其实这次小项目还是学了蛮多的,在这之前我还从没用C#或C++写过这种比较复杂的小项目,出于对C++的畏惧我选择了和Java比较相似的C#。虽然和Java相似但有些不熟悉的地方比如Dictionary和Linq的使用还得查找资料,选择了CS这个专业果然就要接受学习无止境的结果!这次也是我第一次使用VS2012这个IDE,微软出的东西果然功能强大,不过我还得研究一下性能分析那个东西怎么回事= = 感觉自己在算法的思考上还是挺捉襟见肘的,数据结构也要思考半天,还是因为不熟悉吧!希望以后的Projects能更顺利点~ P.S:我好像隐隐看见了电梯……吴际老师我又要谢谢你了( ̄_, ̄ )
2014.9.22 凌晨