oop第二次作业

知识点
本阶段题目集的主要考察的知识点是继承和多态,继承包括对super、extend关键字的使用,方法的重写等,多态包括向上转型、向下转型等。此外还考察了抽象类和接口及之前的封装性,需要我们有抽象类的能力。在设计上考察了单一职责原则和MVC模式。总体上需要对现已学过的知识进行综合运用。
这三次程序设计的作业对于类与类之间的关系的设计要求较高,如果不能很好的设计出合理的类间关系,那么写起这个题目来无疑是这补补,那看看。所以,对于程序的大致框架设计显得十分重要。三次pta作业涉及的知识点很多,要求平时基本功要很好。在答题程序4中,家居强电电路模拟程序-1,家居强电电路模拟程序-2这三次作业中,都以继承为背景,考察了继承的相关知识,例如继承中多态的使用,方法的重写,以及子类的构造方法调用父类的无参构造进行数据的初始化等。同时,对于输入数据的解析和处理又考察了对于正则表达式的使用,利用捕获和分组对解析相应的信息进行创建对象的初始化。在保存对象数据时又考察了集合类的使用,例如ArrayList,,HashMap等数据结构的使用,对于保存的数据要求不同要选择对应的集合类进行储存,HashMap可以存储一个键值对,这就可以用来实现编号和对象一一对应的关系。
1.第四次题目集:这次题目集加了多选题和填空题,主要的难点还是在模糊匹配的方式上,以及“输出顺序优先级为学号、试卷号,按从小到大的顺序先按学号排序,再按试卷号”上。
设计思路:
四.设计思路:
1.定义数据结构来存储题目信息、试卷信息、学生信息和答题信息。
2.编写函数来处理每种输入信息的格式,并存储到对应的数据结构中。
3.编写函数来处理答题信息的输入,并判断每道题目的答案是否正确。
4.编写函数来输出各种类型的信息,包括试卷总分警示、答题信息、判分信息、被删除的题目提示信息、题目引用错误提示信息、格式错误提示信息和试卷号引用错误提示信息。
5.编写函数来处理多张试卷的情况,包括排序和合并输出。
这个题目需要考虑多种异常情况,包括题目编号的缺失、试卷总分不等于100分、题目被删除、输入信息顺序问题等。在处理这些异常情况时,需要根据题目要求来输出相应的提示信息。
类图:

复杂度分析

2.第五次题目集:
设计思路:
因为这次题目的设备并没有电阻,所以无法使用正常的根据电阻求分压的方法来计算设备状态,也因此,电路中只能出现一个设备,不然出现多个设备的话无法进行分压操作。这一点也就给了很多人设计一个特殊电路的可乘之机。但是我并不是如此。
首先,我们判断电路开端是否含有VCC信息,如果有,就设置电路初始电压为220V,反之为0V,GND判断同理。
然后读取所有设备信息,包括控制器和被控制器。按照从电路开端到电路接地端的方向一步一步进行处理,并且令下一个设备的输出电压等于上一个设备的输出电压。这样就能得到所有设备的输入电压和输出电压。
其次,获取了输入电压和输出电压后,就能用前者与后者的差计算出该设备的电压,再根据该设备的状态计算方式计算出它的转速或者亮度等状态信息。
最后,对设备信息进行排序输出。
1.系统需要能够处理多种输入信息,包括设备信息、连接信息、控制设备调节信息等。设备信息包括设备的标识符和编号,以及设备的引脚编号。连接信息表示一组连接在一起的设备引脚,引脚与引脚之间用空格分隔。控制设备调节信息用于改变控制设备的状态或参数。

2.系统需要能够根据输入信息计算出每个设备的参数值,并按照指定的格式输出。输出信息包括设备标识、设备编号和设备参数值,其中参数值需要根据题目要求进行截尾处理。

3.题目中还提供了一些输入样例和输出样例,可以帮助理解题目的要求和测试系统的正确性。

4.这个题目是一个综合性的编程题目,需要考虑多种数据结构和算法,以及对各种异常情况的处理。在实现过程中,需要注意代码的清晰性和可维护性,以及程序的效率和正确性。同时,还需要注意题目中给出的各种规则和约束条件,确保程序能够正确地模拟智能家居电路的工作情况。
类图:


opp-5-家居强电电路模拟程序-1踩坑和心得:
1,基本没有设计阶段,逻辑混乱。所以在写代码前还是要先设计好,这样才能事半功倍。
2,忽略部分情况,比如开关在后面断开,开关后的电器电压全为零,但开关前的电器电压未清零。解决方法便是添加一个TestFlow()方法判断电路是否为通路,在进行Flow()。
3.对象为空的情况,因为本次用了Electronic behindElectronic,这种类似C语言链表的形式的方法,在处理信息时有behindElectronic或者frontElectronic为空导致错误。我的解决方法是重头理一遍,还是设计的问题,一开始没想好怎么写就直接动手。
4,截尾输出出现问题,不应该使用String.format("%.0f",n),应直接用(int)强制类型转换后输出。
3.第六次题目集:
设计思路:
控制设备:
开关、分档调速器、连续调速器的基本功能和特性与之前相同,但增加了所有开关的电阻为0的设定。
受控设备:
1.增加了落地扇,其工作电压区间和对应转速区间与吊扇有所不同,且每个电压区间对应的转速也不同。
2.考虑了电阻的影响,白炽灯、日光灯、吊扇、落地扇的电阻值不同。
3.增加了并联电路的输入,允许并联多个串联电路。
4.引入了串联电路和并联电路的编号系统,以及IN和OUT的概念来表示电路的起始和结束端。
5.连接信息不再单独输入,而是包含在串联电路或并联电路的信息中。
输出信息:
1.输出格式与之前相同,但需要额外输出落地扇的转速。
规则和约束:
1.增加了对并联电路的约束,不允许并联电路中包含并联电路,也不允许多个并联电路串联。
2.强调了电路中的短路如果不会产生无穷大的电流,则被认为是合理情况。
3.明确了电源VCC和接地GND在电路中的位置,以及调速器输入端的连接限制。
新增功能:
1.并联电路的模拟,允许电路中存在并联结构,增加了电路设计的灵活性。
2.电阻的考虑,使得电路模拟更加接近实际物理情况,需要计算电压降和电流分配。
类图:


opp-6-家居强电电路模拟程序-2踩坑和心得:
本次作业在完成时主要出现一些细节错误。
1,未接收全部信息就计算线路电阻。在计算电阻的setR()方法里有条件判断(即Test Flow()方法),而如开关在未接受信息#K时电路为断路,并联里该串联线路的电阻不加入计算,如果在串联主线直接全不算,输入电流直接全为零,因此造成结果出错。
2,精度误差。并联电阻的计算原采用方法为:1/R=1/R1+1/R2+1R3.....结果有误差,两个点过不去。需要改为R=R1*R2/(R1+R2)

改进建议
1.答题程序
对于数据的储存不仅可以通过创建类来实现,但最优的方法还是通过一些数据结构来存储题目,这样可以减少程序的复杂性,ArrayList,HashMap等,都是存储引用数据类型的好手,可以在程序中根据不同的数据需求来选择对应的数据结构来存储数据。
2.家居强电电路模拟程序-1
类之间的关系应该去仔细分析,不能为了得分而使得程序越来越臃肿,新增串联电路类,用来处理设备连接,再类中加上判断该电路是否开路的方法,如果开路,直接输出结果,否则根据电压更新设备状态。
3. 家居强电电路模拟程序-2
类的成员方法仍有改进的余地,要服从单一职责原则,每个方法不能做太多的事,可以把相同的操作抽取出来作为一个独立的方法,同时,对于类间的关系还要再仔细考虑考虑
总结:
这三次作业总体来说难度都存在,但在不断构思和修改后都能比较好的完成。通过这三次的作业,我对继承与多态、抽象类和接口有了更深刻的认识。我掌握了单继承(一对多):每个类的父类是唯一的,一个父类可以有多个子类,多个子类只能有一个父类;多层次继承:父类可以有父类,子类可以有子类。学到了方法的重写/覆盖、向上转型、向下转型、接口与接口之间的多继承。

posted @ 2024-06-05 23:22  钥匙扣要烧烤  阅读(29)  评论(0)    收藏  举报