PTA三次作业总结Bolg

一:前言:

1. 知识点总结:

①:java面向对象类和对象的基本用法

②:关联类和依赖类等类间关系

③:正则表达式的运用

④:Comparable接口和日期类的基本使用

2. 题量:

适中,每次题目集不超过5题

3. 难度:

较大,特别是每次题目集的最后一题,难点在于正则表达式的运用及类的设计,就比如你应该设计几个类,类间关系是什么。

二:设计与分析:

第一次题目集:(只分析最后一题)

1. 类图设计:

我创建了三个实体类,分别是Answer,Examination,Title,分别表示答卷,试卷,题目,题目与试卷是组合关系,试卷与答卷是组合关系

2. 源码分析:

1、源码信息:

代码行数:249

语句行数:141

分支数占总语句数百分比:16.3

方法调用语句数:35

注释语句占总语句百分比:0.8

类和接口数:4

最复杂函数的复杂度:15

平均深度:2.21

最大深度:5

平均复杂度:1.77

由上图,红色线表示当前的情况,在绿色范围(所推荐的java良好代码,如平均复杂度在2.0-4.0之间)表示良好,可知当前代码在注释语句占总语句数的百分比(Percent Lines with

Comments),最复杂函数的复杂度(Maximum Complexity)和每个函数平均包含的语句个数(Average Statements per Method)不合格。

2、源码思路及问题:

思路:首先在Main类中创建三个列表,分别是题目,试卷,列表,用来接收输入的三种信息,在输入一行信息,通过判断第二个字母来判断输入的是什么信息,在去截取内容信息。然后创建题

目对象存题目信息,创建试卷信息存题目及本身的信息,创答卷对象存试卷及本身的信息;全部输入完后在去判题及输出,这两个方法我是写在答卷类里的。

问题:在截取信息时我的代码是存在严重问题的,因为我是截取后立马存储到列表去,我的并不能无序输入,我能过这题的测试点只是本题未测而已,还有判题方法及输出方法也不应该写在答卷类中。

第二次题目集:(只分析最后一题)

1. 类图设计:

与上一次题目集一样,我这次仍然是三个实体类,分别是Answer,Examination,Title,分别表示答卷,试卷,题目,题目与试卷是组合关系,试卷与答卷是组合关系,这次在题目类中添加了分值属

性,在答卷类中添加了题目所得分以及所答的试卷编号两个属性,在试卷类中添加了试卷编号这个属性。

2. 源码分析:


1、源码信息:

代码行数:383

语句行数:198

分支数占总语句数百分比:19.2

方法调用语句数:92

注释语句占总语句百分比:16.7

类和接口数:4

最复杂函数的复杂度:20

平均深度:3.46

最大深度:8

平均复杂度:2.03


由上图,红色线表示当前的情况,在绿色范围(所推荐的java良好代码,如平均复杂度在2.0-4.0之间)表示良好,可知当前代码在最大深度(Max Depth),平均深度(Avg Depth),最复杂函数

的复杂度(Maximum Complexity)和每个函数平均包含的语句个数(Average Statements per Method)不合格。

2、源码思路及问题:

思路:大体上与上一题思路一样,只是多了输出错误信息以及要输出题目分值

问题:在这次题目集我仍然没有改掉输入问题,对于测试点中的乱序,我只是满足了题目间的乱序,不能满足其他信息的乱序,能过也只是本题未测而已,并且在这次我搞混了答卷及考生,我以

为答卷类和考生类是一样的;其次,这次的题目集类设计至少要在6个以上,我类的设计还是太少了,在心得体会我会详述我的优化。

第三次题目集:(只分析最后一题)

1. 类图设计:

这次包括主类我总共设计了12个类,相较于上一题我新添加了判断输入信息的类,以及考生类,删除类,输出类,判题类,赋值试卷类,赋值答卷类,删除对应信息的类。

2. 源码分析:

1、源码信息:

代码行数:850

语句行数:441

分支数占总语句数百分比:17.5

方法调用语句数:221

注释语句占总语句百分比:15.2

类和接口数:4

最复杂函数的复杂度:20

平均深度:2.22

最大深度:9+

平均复杂度:5.57

由上图,可知当前代码在最大深度(Max Depth),平均复杂度(Avg Complexity),类和接口数(Classes and Interfaces)和最复杂函数的复杂度(Maximum Complexity)不合格

2、源码思路及问题:

思路:这次有5种输入信息,所以我设置了1个类5个方法用正则表达式来判断属于那种信息及格式是否正确(因为这次加了许多错误格式),然后在存储信息,这次较上次的巨大突破是我解决了所有信

息的乱序问题,我是先输入玩,

然后再去将赋值,为此我创建了两个类一个是给我的试卷赋内容与标准答案类,另一个是给我们的答卷赋答案类,原先这两个操作是在输入时就完成的,这显然不对;然后我创建了判题类,专门用来

判断题目的正确性及得分,最后输出考生信息及分数即可。

问题:尽管这题新加了许多了类,但还是存在许多不足,就比如解析信息,我是全写在主方法里的(尽管我的判断信息格式单独建了类),这就造成了我的主方法冗余,代码阅读性很差,解决方

案我会在心得体会说明。

三:踩坑心得:

第一次题目集:

①:

在本输入样例中,我并不确定到底什么时候去输出试卷不是100分,开始我测试的是在开头,那两张试卷呢,我开始设计的时候是试卷一张一张的处理

于是我用以下数据进行测试

发现输出结果是

也就是说这段试卷不满100分的说明,不论有几张试卷,都应该放在开头统一输出,就测试点而言,格式错误也是过不去测试点的。

②:

在本样例中,我不理解答卷的输出顺序,是按照试卷的题号进行输出还是按照试卷题目的顺序号进行输出

以下为我的测试:

测试结果是答卷的输出顺序是试卷的题目顺序,就比如试卷里是2-5 1-4,我们是输出答卷时就应该是先输出第二题,在输出第一题的结果。

第二次题目集:

这次的测试点与上次相差不是很多,主要的坑在于正确格式输出得分,以下为样例

①:

针对该测试点,首先输出问题及相应的答案再输出判题结果,最后输出得分,得分的顺序也要注意,所以这里的坑在于你输出的顺序,一旦错了一项就会报答案错误,以下为正确:

然后这题就没什么坑了,主要就这一个点。

第三次题目集:

由于加入两种输入及错误的信息输入格式等导致本题的坑比较多

①:

第一个坑就在于5种输入判断,这里导致我分数始终上不去

第一次提交只对了一个测试点,总共28个,开始我并没有意识到输入信息会不合法从而报Wrong Format错误,后来我写了5个方法通过正则表达式来判断格式,但这里就是巨大的坑,问题在于你的正

则表达式怎么写,就拿这段代码来说:

这个匹配就有问题,万一我的学号掺杂英文(合理的),而我的正则表达式却认为是Wrong Format,这显然是错的,包括我的答案也是,我配的是\d+,但是我的答案可以是其他字符,这我想了很久

才想到这个测试点,所以代码的测试很重要,以下为正确的结果:

②:

接下来的问题就在于这个乱序输入怎么去处理,我是创建了两个类一个是给我的试卷赋内容与标准答案类,另一个是给我们的答卷赋答案类,这样可以解决乱序的问题,结果还是过不去这几个乱序的

测试点;

我的乱序就测试结果而言是完全没问题的,但是就是过不了,后来经过一个下午的测试,发现是因为是去首尾空格的问题,就是因为一个小的格式导致错误。

四:改进建议:

第一次题目集最后一题到第三次的最后一题是依次完善的,所以第一次和第二次的我基本上在第三次上优化完了,所以我主要说明下第三次题目集最后一题的优化。

1.截取信息:我应该设计多个类来截取信息,这是可扩展的,因为在后续题目集题目信息等会变化,如果按照这题的思路,那我就要改代码,根据OCP(开闭)原则,这显然不合理,而我可以

根据5种输入信息创建5个主类,根据继承对应的主类创建子类即可,这就可以在不改变代码的情况下应对题目信息的变化。

2.判题信息:目前我的判题是用答卷的答案与标准答案对比,只有满分及0分,万一后续增加了多选题怎么办,分数就可能有多种形式,所以也应该创建判题主类,子类是各种判题方式。

3.输出信息:与判题一样,创建输出主类,子类是各种输出方式。

五:总结:

这三次题目集总共进行了3周,我对于正则表达式的使用更加熟练,比如:在判断答卷时,String regex = "^#S:\d+ \d+(((\s+|)#A:\d+-(.*|\s+|))|)+$",我尝试使用了“|”,这是对于匹配多种的表达,以及还学会了(?:...)这种非捕获组,它的作用是分组,但不会直接捕获匹配的内容并返回,学会了类间组合关系,在第一次题目集我将题目作为试卷的组合,并且还初步理解了OCP原则,从第一次到第三次题目集中,我基本是改代码,毫无扩展可言,因此我学会了继承及多态用来扩展,在下次题目集中将会体现;对于正则表达式和类的设计我觉得我需要进一步的学习及研究,在第一次题目集中我用了大量if,到第三次我基本用的是正则表达式来匹配,它的功能远不止如此,类的设计也是,从在第一次题目中的4个类,到第三次的12个类,类的功能是逐渐单一的,这样才体现可复用性,SRP。对于老师的严苛教导,我非常感谢,线上线下课的结合使我对于类的设计有了初级的认识;针对实验而言,我的意见是能允许我们自主添加一些功能,比如第三次实验,狮子根据战斗力能将大象杀死,我就想自己添加一些功能,比如通过产生随机数,通过这个随机数使得狮子被大象反杀;针对题目集而言,我希望出些常用API的题目来增加我们的知识面。

以上就是我针对三次题目集的Blog,感谢助教组和老师们的辛勤付出,感谢共同讨论、分享的同学!

posted @   章致诚  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
返回顶端
点击右上角即可分享
微信分享提示