第三次blog作业
前言
本次blog是对第7、8两次PTA大作业的分析总结,对于电路系统的分析总结。
1.关于题量
相比于前两次,这两次PTA,都是只有一道题目,就是对于电路系统的迭代。按照老师说的,第7次PTA老师写了400多行,对于学学生来说,600-800行代码足够了;但是在第八次,无论从难度还是从考虑的情况,题量虽然只有一题,但是比前面化的时间要多很多
2.关于知识点
本次大作业两次PTA主要考察的还是继承和多态,但是我认为还有老师上课讲的一些设计模式,现在回头来看,其实一些设计模式的加入可以让程序的可拓展性更高,同时也更灵活。最后,在第7次PTA上,电路知识没有很体现出来,但是在最后一次,不仅仅是需要编程能力,还需要一些高中的电路知识,比如引脚,分压,分流等。从中真的明白了,软件工程这一行对于需求的了解
3.关于难度
第七次PTA加入的新的电器元件,其实和第六次的代码大差不差,加上两个子类,将输入增加两种情况,再将输出加上两种输出情况就可以了,对于加入的多串联,在第6次PTA上如果已经考虑到了,难度不会很大,可以说是三次电路程序种最简单的一次。
第八次PTA修改了输出情况,它应该是八次PTA上最难的一次。首先从题本身出发,引脚的输出,电流的考虑,并联串联相互结合,要考虑的情况太多了,42个测试点代码的质量考察很高;其次,从同学们的提交情况来说,这是第一次没有同学100分的情况,大部分同学都是50分以下;最后,从老师的角度来说,老师这题都看了快1个小时。综上来说,这一次PTA的难度很大,需求很多,同时考察的物理知识也多,比如如何算电势差,如何分流,如何分压等等。
设计与心得
第七次大作业第一题
设计:本次大作业18个类,相比较于第六次就增加了一个类,和前面设计模式,设计的思路都是一样的。增加的一个类就是类图中的“Mutex”,代表着互斥开关,开始面对互斥开关,不知道如何下手,它不同于其他的,它有三个引脚。我的处理方式是,将输入时的两个互斥开关一起存储,1-2引脚为一个,1-3引脚为另一个,不同引脚但是同名的开关,输出是按照一定的顺序输出即可,后面结果证明这样处理是可以的。
根据Sorcemontor的代码检测,
1.首先是对于行数,其实讲道理,代码行数881行我是没想到的,其实本次PTA并不需要这么多行,如果自己代码整理一下,把一些不需要的地方删除,应该是可以降到600多行,同时很多地方有相同的语句,完全可以用递归,用循环直接处理。
2.其次是复杂度,自己其实忘记了上一次blog写的,自己要将代码重新思考,按照单一职责原则将一些方法一些类单独拿出来,为了以后的拓展,因为这个缺陷,自己的最大复杂度非常非常大。
3.雷达图只有Avg Stmts/Method在绿色区域内,其他的要么太大了,要么太少了,在修改时自己有点一味的冲着100分去了,导致很多的地方可以完善的地方没有完善,可以精简的地方没有精简
4.注释方面:其实注释量应该比之前多了很多,但是由于代码的增加,导致百分比下降,这个其实有所改善,好的注释才可以更好的阅读
5.代码规范这一块,之前几次都没拿出来说,本次自己修改时发现有一些变量不知道什么意思,导致自己修改起来很困难,自己就将一些变量名修改为见名知义的英语单词。
6.平均深度确实蛮深的,主要归咎于自己在输出时写了很多的循环。对于没有规律的字典序,在我的思路下,只能对于数字排序,字母的排序可能需要复写Comparable接口,如果自己修改成这个,代码平均深度可以降低
第八次大作业第一题
设计:从类图就可以看出增加了很多类。首先自己是将原来一个控制类分解,原本控制类中既要输入,又要输出,还要处理电压,本次还要分流,处理引脚,所以我决定单独写几个类,从上面类图可以知道,通过分解的几个类,加上注释,代码的可读性提高了,电路系统是从输入-调整设备-分电压-处理引脚-计算电流-输出,六个步骤逐步进行。
分析:
1.首先是对于代码的整理,主函数确实做到了之前老师的建议,主函数不用来干任何事情,只有调用其他类的方法。
2.对于继承和多态,可能是因为题目很浅显易懂,父类和子类很快就找到了,但是之前因为不知道向上转型和向下转型,导致自己的前期7个类的参数设置不够好,后期自己知道这个知识点,将后面的子类都进行了修改,代码质量提高
3.自己还是改不了,为了分数的问题,即使这次的代码质量依旧很差,但是之前都是100满分,所以没去管这个东西,现在只得到80分,错失了学习的机会
根据Sorcemontor的代码检测:
1.本次代码的雷达图并不好看,基本每一个都超过绿色区域很多很多,第一自己确实没有写完,只拿到80分,想要后期再来减少;其次是自己的代码用了非常非常多递归,对于并联和串联互相交替,我认为递归是一个好办法,可能自己确实没有使用合理。
2.对于平均深度,正如前面所言,出现了二极管,互斥开关等控制设备要考虑的情况太多了,自己又不想从底层里面修改,所以使用了大量的if语句
3.对于复杂度,确实有点惨不忍睹。八次PTA里面这次是断层遥遥领先,代码程序值得好好思考
4.本次还有一提的是代码行数,突破新高,1589行。原来都是在1000行以内即可解决问题。第一本次PTA确实难度较大,其次是面对增加的这么多需求,原本代码确实没有考虑这么多,按照道理来说必须重构的,但是自己还是没有重构,这几乎就是断送了满分的之路。
反思:本次PTA决定加一个反思,主要是自己确实没有拿到100分,值得思考的东西太多了。首先是代码注释,本次虽然有所增加,但是仍然会存在自己找不到自己的需要的方法。其次是代码构思,自己的有些地方写的真的是想到什么写什么,写一步看一步,后面发现自己根本用不到这些属性方法,这是不应该的,类中的属性在开始就应该设计好,而不是为了临时的想法突然增加。还有就是自己的拓展度不够,之前的试卷管理系统,自认为写的还是蛮好的,每次增加的需求,自己可以很快的通过增加子类解决,现在的电路系统,每次加入新的需求,都是需要把原有的一些东西推倒重来。然后就是自己的不能把上课的知识很好的使用,比如一些模式的代入。最后就是对于软件工程的思考,电路是自己薄弱的一块地方,但是客户有需求我依旧要迎难而上。
踩坑心得
对于题目要求没看清,第六次PTA上窗帘不工作时应该是全开,自己写的是全关,但是在第七次PTA上窗帘不工作时又是全关,自己写的是全开,导致自己失分;
自己的代码使用递归不对,导致串联电路无穷搜索,代码陷入死循环,导致答案错误;
在互斥开关的处理上,四种情况内,自认为只需要考虑两种情况,后期还是其他同学告知,自己修改。
互斥开关的情况,自己的串联电路上解决了,但是在复制粘贴情况下,自己少复制一段,导致自己找了好久才得到应该得的分数
又是经典的没看到题目,因为之前题目都说没有考虑短路情况,这次考虑了,自己没看到,导致分数低下
对于引脚的情况,其实当开关断开时,开关后的用电器其实也有可能有电压,只是没有电压差,我写的时候以为全是0;
当二极管正向通过时,可以看成一个导线,我写的时候并联里面的串联没有考虑这种情况,只考虑了反向的情况;
改进建议
1.多写注释,让代码的可读性增加,第一自己修改起来更加便捷,第二让读者更加好阅读。
2.加入一些上课讲的模式,让代码更加专业,好好体会模式的魅力,学以致用。
3.发现代码有问题先构思好,是要重构还是能够在原来的基础上添加,把不需要的代码删除。
总结
本次总结写对于java学习的简短总结吧
1.正如老师所言,语法都是次要的,为什么叫面向对象,就是要学习这种思想,从8次PTA,5次实验,上课学到了很多不同于语法的知识,比如迪米特法则,MVC模式等等。希望大家都认识到本门科目的魅力和目的
2.第二是自己学到了什么,虽然语法是次要的,但是确实语法还是要学的,如何输入输出,体会到java有很多方法很多类比较c语言来说更加便捷。其次就是学习到的思想,上个学期只是有这个想法,单一职责原则,这个学期确实得到实践,可能有的时候用的确实不够合理,但是这个思想也是烙下印子了;迪米特法则,自己用的也是很多的。然后就是模式,策略模式,简单工厂模式,还有自己用的最多的MVC法则,多多少少在构思的时候还是会考虑进去,能不能运用,学以致用。
3.最后是对于java课程的建议,老生常谈希望PTA的题目和实验描述更加清楚,其次是在最后一次PTA中,在截止的前一天晚上,临时增加2个测试点,希望以后可以在开始就加上。
❀完结撒花❀,
本文作者:苏打粉可乐
本文链接:https://www.cnblogs.com/soda-coke/p/18270386
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步