一、前言
在过去十几周的时间里,我完成了题目集1-6的练习。这些题目集涵盖了从简单的答题判题程序到复杂的家居强电电路模拟系统的多个方面。通过这些练习,我不仅巩固了编程基础,还提升了解决复杂问题的能力。以下是对我完成的最后两次题目集的详细总结:
题目集7 家居强电电路模拟程序-3
(1)知识点:
字符串解析:使用正则表达式或字符串分割来解析输入的设备信息、连接信息、控制设备调节信息、电源接地标识。
控制结构:通过循环结构处理多个输入行,实现对复杂电路结构的支持。
条件判断:基于控制设备的状态和连接关系计算受控设备的状态。
数据结构:利用字典或其他集合类存储设备信息、连接信息等,支持复杂的电路连接和计算。
对象设计:创建类来表示控制设备、受控设备、串联电路、并联电路等实体,增强代码的可维护性和扩展性。
电阻计算:考虑电阻对电路的影响,通过电阻公式计算电压和电流,确保物理仿真准确性。
(2)题量:
输入设备信息(包括设备编号、设备类型、初始状态)。
输入连接信息(包括设备编号、连接关系)。
输入控制设备调节信息(包括设备编号、调节方式、调节值)。
输入电源接地标识。
(3)难度:较大,需要模拟电路结构和计算设备状态。。
(4)特点:
简单的电路结构:模拟开关、分档调速器、连续调速器和受控设备(灯、风扇)的简单电路连接。
设备状态计算:根据控制设备的状态和连接关系,计算受控设备的状态。
输入信息处理:处理设备信息、连接信息、控制设备调节信息、电源接地标识。
详细的输出信息:生成所有设备的状态或参数,提供详细的设备状态信息。
题目集8 家居强电电路模拟程序-4
(1)知识点:
字符串解析:使用正则表达式或字符串分割来解析输入的设备信息、连接信息、控制设备调节信息、电源接地标识。
控制结构:通过循环结构处理多个输入行,实现对复杂电路结构的支持。
条件判断:基于控制设备的状态和连接关系计算受控设备的状态。
数据结构:利用字典或其他集合类存储设备信息、连接信息等,支持复杂的电路连接和计算。
对象设计:创建类来表示控制设备、受控设备、串联电路、并联电路等实体,增强代码的可维护性和扩展性。
电阻计算:考虑电阻对电路的影响,通过电阻公式计算电压和电流,确保物理仿真准确性。
电流限制:每个元器件都有最大电流设置,当实时电流超过最大电流时,在输出信息中加入提示。
短路检测:如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”。
二极管特性:增加二极管元件,其电路特性为正向导通,反向截止。
(2)题量:
输入设备信息(包括设备编号、设备类型、初始状态)。
输入连接信息(包括设备编号、连接关系)。
输入控制设备调节信息(包括设备编号、调节方式、调节值)。
输入电源接地标识。
并联电路中包含并联电路的情况。
二极管元件的引入。
(3)难度:
较大:需要模拟复杂的电路结构和计算电阻影响,同时还要处理电流限制和短路检测等功能。
(4)特点:
复杂的电路结构:描述串联电路和并联电路的结构,支持复杂的电路连接和计算。
电阻计算:考虑电阻对电路的影响,通过电阻公式计算电压和电流。
多设备管理:支持多种控制设备(开关、分档调速器、连续调速器)和受控设备(灯、风扇)。
输入信息处理:处理设备信息、连接信息、控制设备调节信息、电源接地标识。
详细的输出信息:生成所有设备的状态或参数,提供详细的设备状态信息。
新增功能:增加了管脚电压显示、电流限制提示、短路检测、并联电路中包含并联电路、二极管特性等功能。
二、设计与分析
这部分重点总结答题判题程序-3
答题判题程序-3类图

(1)类图解释
1.Device 类:

标识符:identifier : String
构造函数:Device(String identifier)
方法:operate()
这个抽象类 Device 是所有设备的基类,它定义了设备的基本属性和行为。每个设备都有一个唯一的标识符,并且可以被操作。
2.Switch 类:

状态:state : boolean
构造函数:Switch(String identifier)
方法:toggle(), operate()
Switch 类继承自 Device 类,表示开关设备。它有一个布尔类型的 state 属性来表示开关的状态(开或关)。toggle() 方法用于切换开关的状态,而 operate() 方法则执行具体的开关操作。
3.Dimmer 类:

亮度级别:level : int
构造函数:Dimmer(String identifier)
方法:operate(), increaseLevel(), decreaseLevel()
Dimmer 类同样继承自 Device 类,表示调光器设备。它有一个整型的 level 属性来表示亮度级别。operate() 方法执行具体的调光操作,increaseLevel() 和 decreaseLevel() 方法分别用于增加和减少亮度级别。
4.Fan 类:

电压:voltage : double
构造函数:Fan(String identifier)
方法:setVoltage(double voltage), operate()
Fan 类继承自 Device 类,表示风扇设备。它有一个双精度浮点型的 voltage 属性来表示电压。setVoltage() 方法用于设置电压值,而 operate() 方法则执行具体的风扇操作。
5.Light 类:

电压:voltage : double
构造函数:Light(String identifier)
方法:setVoltage(double voltage), operate()
Light 类继承自 Device 类,表示灯设备。它也有一个双精度浮点型的 voltage 属性来表示电压。setVoltage() 方法用于设置电压值,而 operate() 方法则执行具体的灯操作。
6.Curtain 类:

电压:voltage : double
构造函数:Curtain(String identifier)
方法:setVoltage(double voltage), operate()
Curtain 类继承自 Device 类,表示窗帘设备。它同样有一个双精度浮点型的 voltage 属性来表示电压。setVoltage() 方法用于设置电压值,而 operate() 方法则执行具体的窗帘操作。
7.Circuit 类:

设备列表:devices : List<Device>
构造函数:Circuit()
方法:addDevice(Device device), operate()
Circuit 类表示电路,它包含了一个设备列表 devices。addDevice() 方法用于向电路中添加设备,而 operate() 方法则执行整个电路的操作。
(2)性能报表

(3)心得
心得总结
在这个过程中,我学会了如何根据需求文档快速搭建起一个完整的控制系统架构,并通过不断的测试来验证其正确性。同时,也意识到了良好的编码习惯对于后期维护的重要性。例如,通过模块化设计,将整个项目拆分为若干独立的功能模块,每个模块负责特定的任务,提高了代码的复用率和可读性。
三、采坑心得
1.输入解析:
问题描述: 最初版本中,输入格式不一致导致解析失败。例如,在处理设备信息时,某些字段可能缺失或格式错误,这使得程序无法正确解析输入数据。
解决方案: 引入严格的格式验证机制,确保每行输入都符合预期格式。使用正则表达式进行匹配和提取。
2.设备状态管理:
错误:忘记更新设备的状态,导致输出结果不正确。特别是对于电压传递过程中的设备状态变化,未能及时反映在最终输出中。
解决方案:在每次处理完控制命令后,立即调用每个设备的 updateState() 方法以确保其状态得到正确更新。
3.电压传递:
错误:电压传递过程中出现错误,导致电压值不正确。
解决方案:确保在更新电压时,按照正确的顺序传递电压值。可以使用递归或循环来保证电压传递的顺序。
4.边界条件:
错误:忽略空字符串或字符串长度为1的情况。
解决方案:在处理字符串前,先检查字符串的长度,确保不会出现数组越界或其他异常。
5.性能优化:
错误:频繁创建新的字符串对象,导致性能下降。
解决方案:使用 StringBuilder 或 StringBuffer 来拼接字符串,减少不必要的对象创建。
6.数据结构选择:
错误:选择不合适的数据结构,导致操作复杂度高。
解决方案:根据具体需求选择合适的数据结构。例如,如果需要频繁查找元素,可以使用 HashSet;如果需要保持插入顺序,可以使用 ArrayList。
7.并发安全:
错误:在多线程环境下使用非线程安全的数据结构,导致数据不一致。
解决方案:使用线程安全的数据结构,如 ConcurrentHashMap,或者使用锁机制来保证线程安全。
四、改进建议
- 模块化设计
将整个项目拆分为若干独立的功能模块,每个模块负责特定的任务。这样不仅可以提高代码的复用率,还能简化未来的扩展工作。例如,将 Switch、Dimmer 等不同类型的设备抽象成各自的类,并实现通用接口,以便于统一管理和操作。
- 自动化测试
引入单元测试框架(如 JUnit 或 Unity Test),为每个重要功能编写相应的测试用例。这有助于及时发现问题,保证每次迭代后的质量。同时,自动化测试还可以减少手动测试的工作量,提高开发效率。
- 异常处理
增强程序对异常情况的处理能力,如空值、空字符串、空列表等边界情况,确保代码能够优雅地处理这些特殊情况。例如,使用 try-catch 结构捕获潜在的异常,并提供明确的错误提示信息。
五、总结
1.学习收获
通过本学期的努力,我对智能家居控制系统有了更加深入的认识。特别是在面对复杂问题时,学会了运用所学知识寻找解决方案的能力。我深刻体会到,任何项目的成功都不是一蹴而就的,而是依赖于细致入微的工作态度和不断探索的精神。
2.需要进一步学习及研究的地方
尽管取得了一些进展,但我认识到自己在某些方面仍然存在不足,比如对底层硬件的理解还不够透彻,未来还需要在这方面加强学习。此外,如何更高效地进行并行计算和并发编程也是我感兴趣的研究方向之一。
3.改进建议
多样化题目类型:提供更多样化的题目类型,激发兴趣。
提供更多参考资料:提供更多的参考资料和示例代码,能让更好地理解作业要求和实现细节。
样例:希望测试点给的样例能多一点
4.学期总结
这个学期对我来说是一段充满挑战与成长的经历。通过参与题目集1-8以及其他相关实践项目,我不但提升了编程技巧,还培养了解决实际问题的能力。在这个过程中,我学会了如何有效地管理时间、规划任务,并在遇到困难时不轻易放弃,而是积极寻求解决方案。
尽管给出的结果并不总是尽如人意,但在编写代码和撰写总结博客的过程中,我学到了许多宝贵的知识。每一个踩坑的经历都充满了意外与趣味,这些经历不仅加深了我对技术细节的理解,也锻炼了我的调试和问题解决能力。在总结的过程中,我更加清晰地认识到自己的不足之处,这为未来的改进提供了明确的方向。
特别感谢老师的悉心指导和支持。虽然我的编程能力还有待提高,但在课程的学习中,我掌握了如何设计框架、模块化开发等重要技能,受益匪浅。这些经验将对我未来的学习和职业生涯产生深远的影响。
展望未来,我将继续努力,不断巩固已有的知识,并探索新的领域。感谢面向对象编程课程中老师和同学们的细心讲解与帮助,希望在接下来的日子里能够取得更大的进步!
浙公网安备 33010602011771号