第三次博客作业
一、前言
知识点
第七和第八次作业都是在第五次第六次作业的基础上进行迭代的家庭电路设计。第七次作业和第八次作业中的数据成员较多,可以采用较多的List数据结果类型来存储数据,这两次作业都增加了互斥开关这个电器,因此对电器的定义需要改变,对应各种特殊的电路连接情况也需要进行单独的考虑,使电路的功能完整,这两次作业同样对数据的精度需求较高,因此数据类型都应该定义为double类型,只要在最后得出结果时进行转换。
题量以及难度
第七次作业增加了互斥开关这个电器,对于电路的整体结构处理与以往不同,处理起来会比较复杂,而且可以包含多并联电路,我在对于多并联电路的情况处理的不是很好,对于很多情况都没有做出正确的判断,整体来说题量与前两次没有增加太多,但是难度有些上升。
第八次作业需要输出各个引脚端的电压,这对于数据的存储需要更多的处理,对数据结构的运用需要一些好的掌握,且增加了电路短路的情况,对于特殊情况的电路需要更多的考虑,我认为难度比前几次都有较大提升,对于各个方面都需要进行更多考虑。
二、设计与分析
第七次大作业
1.这次作业是在第六次作业上的迭代,因此前面的所有的电器类基本不变,但是增加了一个互斥开关电器,需要对电器类整体进行一个改变,将电器的引线设为3根,同时增加了一个窗帘电器,窗帘电器与其他电器不太一样,它的状态不仅受电压的控制,还受到房间灯光的影响,因此需要特殊处理。
2.定义一个串联电路类,该类用于记录并联电路中的每一串联部分,数据成员有:名字,该电路部分的所有电器,该部分电路的电阻。
方法成员有:addDevice(Device device)将主函数中在该部分出现的电器都添加进来;setResistor()用来计算该电路的总电阻,对该部分的所有电器进行遍历,每次将电器的电阻进行相加,如果该部分电路的开关没有处于闭合状态,则将该电路的电阻设为10000,表示断路;setOn(double voltage)该方法用来给该部分电路的所有电器进行状态赋值,先对该部分电路的电器进行判断是否有开关,且开关是否闭合,如果开关没有闭合,则传入的voltage赋为0。
3.定义一个并联电路类,数据成员有:组成该并联电路的所有串联电路;该并联电路的电阻,该并联电路的电压。
方法成员有:addCL()在主函数处理数据时,将串联电路添加进该并联电路中;setResistor()对串联电路列表进行遍历,将每一个串联电路的倒数进行相加,如果串联电路的电阻为0则跳过此条串联电路;getResistor()得到该并联电路的电阻。
4.定义一个干路类,数据成员有:干路的电压,电阻,电器列表。
方法成员有:setVoltage()对电器列表进行遍历,电压初始值为220,根据电器列表中的控制电器接入情况进行调整;getVoltage()得到干路电压;setResistor()与串联电路类一样的计算电阻方法;setOn()与串联电路一样的给电器进行状态赋值的方法。
5.主函数,与第五次作业一样,先对每行输入的内容进行判断,并联电路的串联部分分为一类,干路电路分为一类,控制电器信息分为一类,对每一部分信息接受后,进行相应处理。得到电压后,计算出房间的灯光强度后,将这个数据传入对窗帘电器的控制部分。对电器的输出结果要进行排序,因为排序有两个规则,首先要按开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、落地扇,互斥开关,窗帘的顺序,其次同类设备按编号顺序从小到大输出,因此可以运用比较器的方法来进行处理,这样比较方便。







第八次大作业
1.这次作业是在第七次作业上的迭代,电器类在前一次基础上做了一些变化,增加了一个二极管电器,这个电器与前面的电器也不太一样,它的电阻是随它的接入位置二改变的,因此要增加它在电路位置中接入的判断。在于输出方面,各个电器都要输出每个引脚端的电压,因此在电器的输出方法上,需要进行调整。
2.定义一个串联电路类,该类用于记录并联电路中的每一串联部分,数据成员有:名字,该电路部分的所有电器,该部分电路的电阻。
方法成员有:addDevice(Device device)将主函数中在该部分出现的电器都添加进来;setResistor()用来计算该电路的总电阻,对该部分的所有电器进行遍历,每次将电器的电阻进行相加,如果该部分电路的开关没有处于闭合状态,则将该电路的电阻设为10000,表示断路;setOn(double voltage)该方法用来给该部分电路的所有电器进行状态赋值,先对该部分电路的电器进行判断是否有开关,且开关是否闭合,如果开关没有闭合,则传入的voltage赋为0。
3.定义一个并联电路类,数据成员有:组成该并联电路的所有串联电路;该并联电路的电阻,该并联电路的电压。
方法成员有:addCL()在主函数处理数据时,将串联电路添加进该并联电路中;setResistor()对串联电路列表进行遍历,将每一个串联电路的倒数进行相加,如果串联电路的电阻为0则跳过此条串联电路;getResistor()得到该并联电路的电阻。
4.定义一个干路类,数据成员有:干路的电压,电阻,电器列表。
方法成员有:setVoltage()对电器列表进行遍历,电压初始值为220,根据电器列表中的控制电器接入情况进行调整;getVoltage()得到干路电压;setResistor()与串联电路类一样的计算电阻方法;setOn()与串联电路一样的给电器进行状态赋值的方法。
5.主函数,与前一次作业一样,先对每行输入的内容进行判断,并联电路的串联部分分为一类,干路电路分为一类,控制电器信息分为一类,对每一部分信息接受后,进行相应处理。对电器的输出结果要进行排序,因为排序有两个规则,首先要按开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、落地扇,互斥开关,窗帘,二极管的顺序,其次同类设备按编号顺序从小到大输出,因此可以运用比较器的方法来进行处理,这样比较方便。
三、踩坑心得
1.设备类的继承关系和多态问题:在编写设备类和其子类时,需要注意继承关系和多态的使用。确保子类正确地继承了父类的属性和方法,并且能够正确地重写父类的方法。
2.设备状态的更新和显示:在设备类中涉及到状态的更新和显示,需要确保状态能够正确地更新,并且能够正确地显示出来。这涉及到对设备状态的逻辑处理和显示逻辑的正确性。
3.电路类的计算和设备状态更新:在电路类中需要计算总电阻,并根据输入电压设置设备状态。这涉及到对电路中设备的电阻计算和状态更新的正确处理。
4.异常处理和错误情况处理:在程序中可能会遇到一些异常情况,比如短路错误、电路不完整等问题。需要对这些异常情况进行正确的处理,确保程序能够在各种情况下都能够正常运行。
5.改进建议
第七次大作业:对继承的利用需要更好的了解,不要让大量的无效代码出现,对输入信息的处理可以更加合理,最好不要运用大量的循环来对输入信息进行处理。
第八次大作业:对各种可能出现的电路情况都需要进行判断,不能让一些不合理的电路情况出现,对数据的运算需要保持精度,在对基本数据类型进行定义时,尽量用double类型以保证数据的精度不丢失,否则会导致结果出现偏差。
6.总结对数据存储的方法,需要考虑清楚什么时候,用哪种数据结构进行存储更加方便。
第七第八次作业,需要对继承关系有一个好的运用,让代码的复用性提高,对电路的判断首先需要对大部分情况能够处理,然后再去对一些比较特殊的情况进行单独判断,不能一开始的基本处理只能处理一些最基本的情况,而大多数的情况都要靠if判断来处理,这样会使代码的复用性变得很低,对每种数据的存储方法也应该有一个判断,该怎么存储更加合理,可以使程序更好的完成。
学到了什么
对于项目的功能的迭代,我们需要准确的进行需求分析,将每次的代码都进行调整,不能将前面的代码完全照搬,在每个类上的设计都应该有所调整,这样才能使当下的版本更加符合要求。
同时对于Java中的很多基础方法与知识,任需要不断的学习,尤其是在类与类之间的关系的理解上应该更加深入,多了解面向对象设计的原则,以便在以后的问题上能够成功解决。
浙公网安备 33010602011771号