题目集4及期中考试 BLOG总结
题目集4及期中考试 BLOG总结
一、 前言:
据上一篇blog已有一个月,在此期间,我一共完成了一篇PTA题目集4及一次期中考试,我将从知识点、题量、难度等方面对两次题目进行总结。
1、 知识点
题目集4考察了正则表达式的基本应用,利用正则表达式找到符合要求的字符,不同类的方法相互调用,以及数学逻辑思维。
期中考试由浅入深地考察了封装、继承、多态等Java常见语法。
2、题量
两次题目的题量都不算很大,均只有三题,但题目集4的第二题包含了多个case,造成了单题题目量较大,需要考虑多重情况,较为复杂。
3、 难度
题目集4第二题整体与四边形有关,难度较大,需判断输入格式是否正确,格式错误有多种情况,要靠自己思考错误类型及错误方法,十分考验学生考虑问题的周全程度,除此之外,此题还需根据不同情况做出符合要求的程序,十分考察学生的数学思维,除第二题之外,题目集4其余两题难度都较小,其余两题均只考察了Java基本语法,并未涉及过多的数学知识。期中考试难度并不大,期中考试题目集中的三题为逐步递进的关系,考察知识点越发详尽,但只要掌握了其基本使用方法,本题目集中的三个题目难度均不大。
总而言之,除题目集4第二题外,其他题目难度均不大,对数学知识的考查较少,只要掌握了Java基本语法的使用方法,便可完成程序设计。但题目集4的第二题更多地像是在考察数学知识,而非Java程序设计,不过同时它也考察了我们对问题的全面思考。
二、 设计与分析
1、 题目集4 7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)
类图:
分析报告:

解释:
本题所需结构较为单一,只需利用正则表达式提取出所需要的字符串,故如图所见,本题仅使用了一个类,一个方法体,但注释过少,因题目较为简单,故未使用最大圈复杂度较小,最大函数深度较小,平均函数深度较大。
心得:
因本题较为简单,故无过多代码,未定义过多类与方法体,但与此同时,若想成为一个好的程序,万不可省略注释,应当在之后的学习中注意这一方面,依据程序内容合理增添必要的注释。
2、 题目集4 7-2 点线形系列4-凸四边形的计算
类图:
分析报告:



解释:
由图可见,本题共使用了三个类,多个方法体,但多个类的注释均过少,Way类甚至未添加注释,三个类所含方法体或过多或过少,且Main类包含的语句数目过多,最大圈复杂度亦为或过大或过小,未能在合理范围内。Main类最大函数深度略大,平均函数深度过大,平均圈复杂度过大。Four类最大函数深度较好,但平均函数深度较大,平均圈复杂度也较大。Way类最大函数深度较小,平均函数深度较小,平均圈复杂度较小。
心得:
本题较为复杂,需使用正则表达式判断输入是否正确,且题目本身需判断的情况较多,故程序整体较为复杂,但这更应在合适部位适当增加注释说明代码功能。整体来看,代码复杂程度不均,有的类过于简便,而有的类过于复杂,在之后的学习中应当避免这类情况的发生,代码应做到合理分配,依据每个方法的具体功能以及可使用性,合理分配其所在的类。
3、 题目集4 7-3 设计一个银行业务类
类图:
分析报告:


解释:
由图可见,本题使用了两个类,多个方法体,且在两个类中注释均过少。在Main类中包含的语句数目过多,但最大圈复杂度过小,最大函数深度过小,平均圈复杂度过大,仅有平均函数深度较为合适。因本题所要实现的功能较多,故将主体代码放入Main类中,与银行功能有关的代码均放在BankBusiness类中,BankBusiness类仅有平均每一方法所含语句数较少,其余性能都较为合适,总体而言结构较为合理。
心得:
两个类中仍旧注释很少,此项一定要引起注意,不可因为题目较为简单而省略注释,除此之外BankBusiness类结构较为合理,可供之后书写程序时作为一项参考。相比较而言,Main类中的问题较多,且基本都为我时常出现的问题,在今后的学习中我应当多加注意。
4、 期中考试 7-3 点线面问题再重构(容器类)
类图:

分析报告:






解释:
本题共使用了六个类,其中Main类为其主类,Element类为多个类的父类。此程序中Main类结构最为复杂,多项数值都较为偏高,除此之外,大多类中的方法体都较多,但平均复杂度都较低,由此可见,大多方法结构都较为简单,并非十分合理。而后便是所有类中的注释都较少。
心得:
可将Main类中的一部分代码移至其他类,由此降低Main类的复杂程度,应做到代码的合理分布。本程序仍未添加注释,不可因题目已给出大多结构而省略代码的书写,仍应在合适位置适当添加注释,增加代码的可读性。
三、 踩坑心得
1、 题目集4 7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)
本题主要考察的知识点为正则表达式,需从输入的一长串字符串中提取到符合条件的数字,而后将所有数字相加得到最终结果。在做本题前,我尚未完全掌握正则表达式,导致多处正则表达式使用不规范。题目要求为计算出每一行数字之和,但我在最开始的时候因无法合理使用正则表达式而不知如何才能按照题目要求写出相应的代码。

除此之外,我还不清楚如何才能在读到“end”时结束输入,而后我想到了利用循环解决该问题,故如上述图片所示,我最终使用了while语句,当检测到“end”时便跳出循环,由此解决了我原先的问题。
2、 题目集4 7-2 点线形系列4-凸四边形的计算
此题中我的问题较多,该题更多地考验的是我们的数学知识,以及数学的逻辑思维能力。在判断是否为四边形时,我是用的是如下方法,我尚未发现有何问题,但有一个相关的测试点无法通过。

除此之外,我尚未完全掌握一个简便方法判断一个点是否在三角形内部,我所思考到的方法都过于复杂,不利于问题的解决,且不利于我自己在后期检查代码所包含的问题,导致我所写的代码只能判断部分四边形是凹四边形还是凸四边形,而我并不知道问题出在哪里。
在该题中,我所想到的判断点所组成的图案的形状都为较为规整的点,未考虑到多种特殊情况,考虑不周全导致部分测试点无法通过。
因本题多处与题目集3较为相似,故多处思路同题目集3相同,这也就导致了些许题目集3所出现的逻辑上的问题,在本题中也有所体现,且尚未找到合适的解决方法。
3、 题目集4 7-3 设计一个银行业务类
本题较为简单,但在书写此题时,我未仔细看题,花费大量时间思考如何将每个用户的个人信息存储到一起,导致花费大量时间,而后我才注意到本题只涉及到一名用户,且其信息可自主存储在相应的类中,只需通过
将用户信息利用构造器传入到BankBusiness类中。
本题中,我原先忽视了double类型的计算存在误差,而导致在计算账户余额时出现了一定的偏差,而后我将double类型的数据均改为了float类型。
4、 期中考试 7-3 点线面问题再重构(容器类)
本题我未完全熟悉ArrayList<Element>类型的使用方法,忘记了其自身包含remove方法,并不用自己写一个,导致在此方向上耗时较多。本题整体而言,较为简单,因题目中大多都已写明每个类的属性和方法,已给出相应的类图,故未出现过多问题。
四、 改进建议
1、 题目集4 7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)
从SourceMonitor以及PowerDesigner软件测评结果可以看到,本程序结构较为合理,但注释过少,且在所有问题中,最易改善的问题亦为注释过少,应当在合适的位置适当标注些许注释,有利于自己对自身代码的理解与反思,在后期修改代码时也较为便捷,除此之外,也可降低他人阅读代码的难度。除此之外,我应当更加熟练掌握正则表达式的使用方法,本题只考察了其基本用法,并未深入考察,故尚未将我更多的问题暴露出来。
2、 题目集4 7-2 点线形系列4-凸四边形的计算
从SourceMonitor以及PowerDesigner软件测评结果可以看到该函数较为复杂,虽已使用了正则表达式判断输入格式是否正确,但同时也使用了较多的for和if语句判断输入点个数是否正确,此处亦可使用正则表达式降低代码整体的复杂程度。判断点是否在三角形内部或许可以使用经过该点的直线与三角形有几个交点来判断该点是否在其内部。
3、 题目集4 7-3 设计一个银行业务类
将double类型转换成float类型来降低计算误差并不是一个好方法,我可以寻找一种方法,不改变数据类型,而达到降低误差的目的。
4、 期中考试 7-3 点线面问题再重构(容器类)
应当更加深入地学习ArrayList,了解其主要使用方法,以及其基本语法,将尚未掌握的知识点弄懂,并学会简便地使用它,争取在下次使用时能做到得心应手。其次一个问题便为注释过少,在之后的学习中我应当在程序合适位置适当添加注释,以增加程序的可读性。
五、 总结
这两次的题目集不仅考察了我们的数学思维,有利于我们总多方面认真思考问题,还由浅入深地考察了继承与多态的知识。继承与多态作为Java中最基本也是较为难懂的部分,十分值得我们进行深入学习。通过这两次的题目,我知道了自己知识中的盲点在何处,明确了今后的学习方向,受益匪浅。
浙公网安备 33010602011771号