题目集4~6的总结
PTA 4-6 题目集总结:
(1)前言:总结三次题目集的知识点、题量、难度等情况
题目集4应该是做PTA作业以来最难的一次了,题目量不算多,只有三道题,这次题目集难在第一题,水文数据校验及处理。
这道题目主要是在考查正则表达式的应用以及对输入数据串进行拆分等,由于输入的数据量较大以及格式要求比较多,所以使用
正则表达式时非常容易出错,导致得不到分,所以这次作业得分普遍偏低,其余两道题难度一般,中规中矩,第二题考查功能的
聚合,将前几次作业中做过的功能合起来,求下一天、前一天以及两个日期之间相差的天数,第三题考查的是类的继承。
题目集5的难度比起4来降低了一些,不过题目量变多了,有五道题目,第一道送分题,找字符串中最长的一个,通过比较每
个字符串的长度即可,第二道题合并数组,之前已经做过了,这里就不再说了,第三道题是对整型数据排序,分别使用插入排序、
选择排序及冒泡排序三种算法进行排序,算是比较简单的,第四题是统计Java程序中关键词的出现次数,涉及了java针对数组的
遍历、比较、运算等,统计关键词次数以及拆分出关键词,有一定的难度,第五题跟上一次作业基本一样,也是考查功能的聚合。
题目集6总体而言是三次作业中最简单的一次,所以题目量也是最多的,前四道题主要考查正则表达式的应用,难度不大,但
是需要细心一些,不然很容易出错,同时也要熟悉正则表达式的一些基本用法,第五题是图形的继承与多态,求面积以及进行排序,
算是这几道题目中难度最大的,第六题是实现图形接口及多态性,同样是求面积,比较简单,这里就不赘述了。
(2)设计与分析:重点对题目的提交源码进行分析,可参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图,要有相应的解释和心得(做到有图有真相),
本次Blog必须分析的内容如下:
①题目集4(7-2)、题目集5(7-4)两种日期类聚合设计的优劣比较
第一种日期类聚合设计将Dateutil与Day进行了聚合,第二种与年月日都进行了聚合,它们各自的类图如下:


通过比较,第二种聚合设计更为简单,复杂程度更低。聚合关系的两个类处于不同的层次,一个是整体,一个是部分,同时,是一种弱的“拥有”关系。
表现为Dateutil类包含有其他类的全局对象,但是其他对象可以不在Dateutil创建的时刻创建。
②题目集4(7-3)、题目集6(7-5、7-6)三种渐进式图形继承设计的思路与技术运用(封装、继承、多态、接口等)
题目集4(7-3)是图形继承,每个类都有构造方法,这道题目思路很简单,题目已经给出来了,按照题目要求创建所要求的几个类,然后
继承各自的类,再创建各自的构造方法,然后按照题目要求设置属性,创建getter以及setter方法传送数据,再创建不同图形类求面积的方
法即可,这道题还是比较容易的。类图如下:

图形类中都包含了getarea方法用于求面积,还有各自的长宽属性。
题目集6(7-5)是图形继承与多态,相比上一道题目它多了多态, 多态可以用“三个定义和两个方法”来总结。三个定义
分别是父类定义子类构 建、接口定义实现类构建和抽象类定义实体类构建,而两个方法分别是方法重载和方法重写。本
次作 业采用的是抽象类定义,实体类构建的方式。这道题有一定的难度,对于继承和多态掌握不好的话做起来有一定的
难度,但也是一道很好的训练题,本题定义Shape为抽象类,其他图形类为实体类。类图如下:

抽象类Shape中定义了getarea方法,其他类继承实现了这个方法。
题目集6(7-6) 是实现图形接口及多态性,这道题比较简单,与第一道差不多,根据题目要求创建接口以及图形类
即可,类图如下:

接口中含有getarea方法用于求图形的面积,其他类定义了属性以及getter和setter方法传送数据并进行计算。
③对三次题目集中用到的正则表达式技术的分析总结
这三次作业用到的正则表达式比较多,主要是对数字和字母进行匹配,其中水文数据校验及处理这道题中正则表达式使用的
难度较大,这道题我只得了两分,所以也不知道该总结啥,不会,主要是对输入得字符串拆分并且进行匹配,并且在输入值
不同时有不同的匹配规则,所以难度较大,其他题目比较简单,就是对输入得账号、验证码以及学号进行匹配,正则表达式
的运用可以参考百度,难度不大,但是使用起来细节比较多,做题的时候需要仔细一些。
④题目集5(7-4)中Java集合框架应用的分析总结
这道题目使用了ArrayList,ArrayList是List的一个实现类,可以实现数组大小的可变,可以很方便的进行增加和删减数组内
元素的操作。List list = new ArrayList()这种形式成为向上转型,ArrayList实现了List接口,可以看成是从List继承而来,一
个子类的对象可以指向它父类。ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。ArrayList 实现java.io.Ser
ializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。通过使用ArrayList可以很方便的对组内元素进行处理。
从而实现统计和筛选。类图如下:

(3)采坑心得:对源码的提交过程中出现的问题及心得进行总结,务必做到详实,拿数据、源码及测试结果说话,切忌假大空
对于题目集4,只得了一半的分,水文数据校验及处理这道题不会做,说明自身水平还不太行,还需要好好学习,再接再厉,
对于正则表达式的运用还很生涩,日期问题的处理当中对于润年以及非润年、平月和大小月的处理一开始出现了一些问题,测
试点没过去,后面发现对一些日期之间的差值有几天的误差,原因是特殊日期没判断好,改正后通过了,图形的继承挺简单,
没什么说的,就是输出格式这块一开始出现了一些问题,需要仔细一些。
对于题目集5,这次难度还是可以的,没上次那么大,前几道题主要是排序问题,对于几种排序的方法有些陌生了,通过百度
之后记起来了,难度不大,日期这道题与上面的差不多,这里就不再赘述了,难度较其他题大些的是第四题,统计Java程序中
关键词的出现次数,这道题使用到了ArrayList,通过这道题让我学习到了如何使用,还是非常有帮助的。
对于题目及6,这次的难度应该是三次作业里面最低的了,但还是有些测试点一开始并没有通过,问题出在正则表达式上面,使
用的还不够熟练,比较生涩,所以出现了许多问题,对于分别判断一串数字的不同位置的值使用起来经常出错,最后还是请教了
班上的大佬才通过了,其它题目就是一些方法的调用以及类与类之间的关系出现了一些问题,最后都一一解决了。
(4)改进建议:对相应题目的编码改进给出自己的见解,做到可持续改进
有些题目的代码写的比较复杂,还不够精炼,可读性不好,虽然说功能都实现了,但还是需要很多改进的,比如几道图形处理的
问题,要求用不同的方法写,接口啊抽象类这些,对于多态的运用还是有些模糊,该创建些什么类,定义什么方法如何调用等方
面还有许多问题,很多代码都写在mian方法里面了,显得很臃肿,这是需要改进的。
(5)总结:对本阶段三次题目集的综合性总结,学到了什么,哪些地方需要进一步学习及研究,对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见。
通过这三次的PTA作业,让我进一步学会了多态的使用方法,当然,印象最深的还是正则表达式的使用,这是一大难度,需要不
断练习,正则表达式的使用很广,很多项目中都需要使用,一定要仔细,不然很容易出错,老师上课讲的很清楚,但是毕竟上课
时间有限,很多东西需要我们去自学,师傅领进门,修行在个人,在今后的学习中,需要我们自己不断地去自学,提高自身水平。
浙公网安备 33010602011771号