前言
本次大作业是前一次blog中前三次大作业的迭代,加一个新的两次迭代作业。
设计与分析
第四次大作业
第四次大作业比上一次作业增加了题目类型不同的迭代,通过增加选择题类和填空题类解决,两个都继承自题目信息类,所有信息(题目信息,试卷信息,答卷信息,学生信息 ,删除题目信息)不按顺序输入(乱序输入),所以依旧使用正则表达式判断,并用ArrayList和HashMap来进行储存。首先本次迭代增加了选择题和填空题,因为二者都是题目,所以继承题目类,同时选择题又分为多选和单选,依照输入信息所提供的答案数量进行区分,按照不同的答案,基于不同的分值,例如如果多选题答卷的答案与标准答案一致,则给全分,如果少选则给一半分,若错选则不给分。其次,填空题方面,本次题目给的约束为:答案与标准答案内容完全匹配给满分,包含一个错误字符或完全没有答案给0分,包含部分正确答案且不含错误字符给一半分,如果一半分值为小数,按截尾规则只保留整数部分。最后,在本次迭代中与上一次题目不同在于,本题考虑多个同学有多张不同试卷的答卷的情况。输出顺序优先级为学号、试卷号,按从小到大的顺序先按学号排序,再按试卷号。
第五次大作业
第五次大作业则是不同于前几次大作业,是一个新题目,电路模拟程序。第一次大作业还算简单,没有考虑电阻和并联,也不考虑短路,只需要考虑串联即可。而本次大作业需要设计好父子类的关系。 开关,分档调速器和连续调速器继承自控制设备类,吊扇、白炽灯和日光灯继承自受控设备类,分别用K,F,L,B,R,D来表示。本次大作业和前几次大作业相同,都需要用正则表达式来提取每行的信息,由于本次只考虑串联,我则用ArrayList将信息存储到数组中。
第六次大作业
第六次大作业相较于第一次迭代,则加入了串联电路和短路的情况,核心就是要设计一个类用来储存电路信息(并联电路类)其中除了第一次迭代的信息还包括了电阻和电流,便于计算。在分析信息与储存中,先运用储存String类的ArrayList数组将信息储存,再逐个遍历寻找对应的类(用getclass实现),而短路的情况要另外考虑(emm,怎么考虑呢?)。
踩坑与心得
第四次大作业
本次多学生多试卷的信息处理不到位,导致答案错误。如图:
清楚审题后,了解了正确排序方法后,问题解决。
第五次大作业
1、在设计类的时候,太过于杂乱,没有考虑好各个类之间的关系。
在理清楚每个类之间的关系(继承关系)之后,问题的到解决。
2、输出时,代码出现死循环,没有打印出任何信息
在找到问题修改后,解决,如图:
第六次大作业
1、添加了个串联电路类来表示干路电路,而干路电路既可以存储干路中的电器元件,又可以存储一组并联支路;(十分方便)而支路则储存在并联电路类中,可以单独计算自己的电阻。而干路电路知道并联电路中的各个电阻也就可以单独计算总电阻了。
改进建议
1、整体代码对信息的分析依旧像上几次大作业一样,运用startswith(),但需要识别的信息多了就显得冗杂麻烦,所以可以先将首字母与类名绑定(HashMap),然后以字符型存入数组,再依照首字母找到对应的类名,然后创建相关对象,相较于原先的方法要方便很多。
2.在设计类的时候,可以再清晰一点,例如可以创建电路类给串联电路类和并联电路类继承,提高代码的复用率,减少耦合度。
总结
1、在代码编写的过程中,我对正则表达式的运用愈加熟练
2、在设计类和方法的时候,依旧会摸不着头脑,比如在设计开关类时,我就忘记了他应该继承受控电器类。
3、在每次迭代后,代码的思路逐渐变得更难,很难理清楚头绪,这还是我需要提升的地方。
4、这几次大作业也使我对多态数组,动态绑定等概念的理解和运用更加深刻。
5、我学习到运用好不同的容器去储存信息会使代码逻辑更加清晰。