一,前言
第四次大作业:第四次大作业,对我而言,并没有新增多少内容,这也给了我更多的时间去审视之前的结构与设计,我将我原先的结构重新写了一遍,做了许多优化,比如说又多提取出了两个类,尽量去实现单一职责原则,但是,在主函数当中,仍然用了一些循环,或许我可以将这些循环写到其他的类当中,所以仍然有不少值得优化,或者说没有实现单一原则的地方。这次作业给我的另一个挑战是对于正则表达式的运用。这次题目都新增了多选题,多选题当中,哪个选项对应哪个答案,有多少个选项?我通过复习视频重新把正则又过了一遍,我认为对我的提升很大,当然还有,对于一些特殊情况的考虑,怎么样去设计才能让它按照题目的要求去输出特殊情况?在写程序的过程当中,我也会尝试去猜测出题者的本身的设计思路,当然,幸运的是,我发现自己的思路差不多能与题目要求相符,这说明我的设计思路是相对合理的,当然,设计思路有很多种,不能单一的用优劣去评判。通过比较同学之间的设计思路,我也能发现许多很新奇,我没有考虑到的地方,往往能让我对他们刮目相看。
第五次大作业:第五次大作业又开启了新一轮的主题,这次题目发的比较晚,可以看出老师在,设计的时候花了很多心血,因为当老师一开始将题目的简述发到群里时,我很难去想象这要如何去实现,但老师刻意将这次作业设计的比较简单,并且给我们提供了一个基础的思路,那这次的程序就顺理成章的出来了,过在写的过程中,也出现了许多问题,这里先按下不表。但是可以看出来这次作业的目的,很大一部分是让我们学会抽象类的应用,将这些电器的共同特征抽象出来放到电器类中,并且通过向下转型,将它们存在同一个链表当中。那么,如何在转型之后仍然保留这些电器独有的方法,就需要我们在抽象的时候花点心思。
第六次大作业:第六次大作业是在家居电路上的优化,前面说到第五次难度相对简单,主要原因是他没有考虑并联电路,也没有考虑电阻,更没有考虑分压,但在第六次大作业中都加上了。原先只有一条串联,所以没有必要抽象出一个电路类,现在这一次要多设计一个,串联电路类和一个并联电路类,我的想法是将这两者也视为电器的一种,就实现的效果而言我比较满意。并且老师也邀请完成较好的同学上去阐述思路,我发现他的想法也与我不谋而合,事实证明,抽象向思维确实非常重要,合理利用好抽象,能让我们在写代码时事半功倍,并且让人思路更加清晰。
二,结构与设计
第四次
第五次
第六次
三,踩坑心得:
第四次作业过程当中没有太遇到很大的困难,重点讲第五次大作业和第六次大作业,在第五次大作业当中,一直有几个点过不了,我在不断的审视自己,可能会犯了错误之后,虽然没有发现自己的问题,幸运的是我向其他人请教,他们发现了我在,边界控制上的一个问题,这主要是因为我比较粗心,但当局者迷,旁观者清,可笑的是,我发现这个问题之后,只在pta上进行修改,我没有去改,我idea上的源代码,导致我写第六次大作业时,由于是在ida上的源代码进行修改,然后我又把那个问题给忘了,这导致我写完只拿了40多分,当时想破了头,也想不出错在哪,只是想当然的认为我上次写了能复用的部分一定是对的,因为上次拿到了满分,包括第六次没有给出错误的点在哪,告诉我们具体的测试点是什么?所以我们只能自己想测试点,幸运的是,最后我发现了这个问题,最后进行改正,拿到了满分。当然,这里面还有一个小插曲,就是数据的精度问题,对于并联电路的电阻,只有采取一种特定的算法,才能达到题目要求的精度,这一点上我认为是比较,难以想到的,因为理论上来说,两种算法算的都是一样的,不应该有精度上的差别,但是实际上它不仅出现了,而且也影响了我们的得分,在一般情况下,你根本不可能想到是什么原因导致的,我也是经过其他人提醒才发现这一点。
四,改进建议,
对于一些特定的算法,如果我们使用的不是跟老师一模一样的算法,就比如这次的并联电路电阻计算,那很可能就会出现精度和测试点对不上的情况,我认为这种情况是很难去分析出来的,如果之后出现了一些对精度要求非常高的算法,要采用哪一种计算方式?