一、前言:
本次的Blog,是电路3和电路4,首先我想说的是在电路2的时候,我并没有拿到满分,直到做到电路3的时候我才发现了电路2缺少的部分,就是嵌套的串联电路,之前是没有考虑在一个T里面还有T的,电路3的一个测试样例这才点醒了我,随后也是修改了电路2的代码,拿到了满分。
二、设计与分析:
大作业7最后一题:
1.源码分析:
这次的迭代相比于上次的内容,主要是增加了如下
- 增加了一个互斥开关
- 增加了一个受控窗帘
对于受控窗帘的话处理比较简单,
class Curtain extends Controlled_equipment{...}
在处理的地方也像其他受控设备一样加在合适的地方,受控窗帘的符号为S
而对于互斥开关而言,就有些难度了。
其主要是因为他有3个引脚,而且可以空出一个引脚。
为了方便处理,我其实是将这个互斥开关拆分为了两个开关,而这两个开关继承最普通的开关,其实为何要继承,主要是由于编号的原因。
而在互斥开关定义一个类继承Control_equipment,并在内部顶一个两个开关的变量。
toString()和set状态如下
从toString()也不能看出,由于是两个开关的结合体,而互斥开关肯定只能开一边的,所有就是通过两个开关的状态来判断了。
而sethSwitch1和sethSwitch2就主要是来设置变量的,让互斥开关能知道是哪两个开关的结合体。
接下来就又是一个重点了,由于他们是共享了一个引脚,而且可以靠VCC也可以靠GND的一边,所以我做出如下处理
这个就主要是处理可能靠VCC的情况,在原来的parseEquipment函数就主要处理的是靠着GND的情况。
而在处理的时候就当做两个开关,最后统计结果的时候合并为一个来。
2.SourceMontor分析结果:
3.UML图:
4.时序图
大作业8:
1.源码分析
这是一个比较难的题,因为增加了电压的处理,比较难以处理。由于在原来,我算的便是电压,所以也许会稍微轻松一点。但最后实际做出来,也不是一般的难。而其中最难处理的还要属电压莫属了。
首先就是增加的
由于其开关断开的时候,并联的一路比如开关的右侧可能会有电压。所以就如上图代码所做操作,首先查看开关哪个是断开的然后去查找将另外一路的电压赋值过去。
其次增加的还有各种判断,由于算得了电压,又有电阻,就能求出电流来,然后就可以看其电流是否超过了限定的电流。
其电流的额定重新设定在每一个类的构造函数里面去。
而对于输出信息而言,就通过增加一个变量来存储是否超过电流和一个计算现在电器电流的函数来得出最终的输出信息。
调用例子
这样就更加方便了输出的操作。
同时在每次进行
device.setInputVoltage(outputVoltage);
device.setOutputVoltage(outputVoltage);
设置输入输出电压的时候每次也需要进行下电压计算的。
加上如下
device.compute();
这一函数是主要针对串联电路和并联电路他们的分支上的每个电器的电压计算的。
最后还有其是否短路的标识。
public boolean isShort()
{
for(Electrical_equipment device : deviceList)
if(Double.isInfinite(device.current))
return true;
return false;
}
在最后的处理时候调用此函数,如果短路就直接输出短路的信息,否则才会执行下一步。
在最后的反复调试下,虽然测试样例都能过。做出了很多工作,但最后得分还是不尽人意,48分。
2.SourceMontor分析结果:
3.UML图
4.时序图
三、踩坑心得
- 对于互斥开关的实现,由于其有多个引脚,且能够空出一个引脚来控制不同电路的状态,因此设计时面临一定难度。我采用了拆分成两个普通开关的方式来处理,通过继承和对状态的控制,实现了这个复杂开关的功能。然而,这个设计虽然有效,但仍需考虑如何简化和优化代码结构,使其更具可扩展性和可维护性。
- 在电路8的设计中,加入了电压的计算和电流判断。这一部分比较复杂,特别是在开关断开时,如何正确处理并联电路中的电压传递,确保计算准确。这不仅仅是一个简单的电压电流关系问题,还涉及到如何在代码中高效处理这些物理量。尽管我在代码中做了较为详细的判断和计算,最后得分仍然不尽如人意。这提醒我在设计电路系统时,代码的可读性和稳健性是非常重要的,尤其是在处理较复杂的电压电流问题时。
- 在电路的实现中,我增加了短路检测功能。这是非常关键的一个环节,因为电路中的短路会影响整个系统的稳定性和可靠性。我通过遍历设备列表,检查电流是否为无穷大来判断是否发生了短路。虽然功能是实现了,但在优化和提高效率方面仍有改进空间,尤其是当电路复杂时,可能需要更精细的短路判定方法。
- 在整个开发过程中,源码分析与调试占据了很大一部分时间。面对复杂的电路控制逻辑,我不得不多次反复检查代码,确保每个环节都能正常工作。这也让我认识到,良好的代码注释和日志记录能够在调试过程中提供极大的帮助。
四、改进建议
- 在电路设计中,嵌套电路的处理是非常重要的。为了避免出现类似电路2中未考虑到的嵌套串联电路问题,建议在设计时提前规划电路的层次结构,确保每一层的电路关系能够正确反映到代码中。可以在初期设计阶段进行更多的结构化图形化规划电路的嵌套结构,确保每个电路模块都能准确地被识别和计算。
- 互斥开关的设计虽然解决了问题,但代码实现相对复杂。为了提升代码的简洁性和可扩展性,可以考虑采用更通用的设计模式,比如状态模式或策略模式,来管理互斥开关的状态。通过设计一个更为灵活的类结构,使得不同类型的开关能够以统一的方式进行管理和操作。这样可以减少对硬编码的依赖,提升代码的重用性。
- 这两次的大作业让我更加意识到良好代码结构的重要性。在面对复杂电路时,采用模块化编程和设计模式能够大大提高代码的可维护性和扩展性。特别是在处理多个设备和不同类型的开关时,继承和封装能有效简化逻辑,提高代码的复用性。而我正是需要加强这一点,因为后期写的代码真是一坨。
总结
通过这次电路设计与分析项目,我不仅加深了对电路模拟的理解,还在代码实现和调试过程中积累了宝贵的经验。在设计与实现中,我意识到电路设计不仅要关注电气原理,还要深入理解每个组件在程序中的实现及其交互。特别是在处理复杂开关和电压电流计算时,良好的代码结构和优化显得尤为重要,模块化编程和设计模式大大提高了代码的可维护性和扩展性。电压、电流和短路检测的处理虽然实现了预期功能,但也暴露出在复杂电路中对物理量计算的细致处理仍有改进空间。同时,调试与测试成为了关键环节,尽管做了很多工作,但得分上仍有不足,提醒我在处理电路模拟时,要兼顾逻辑正确性、性能和效率。
学期总结
在这一学期的Java课程中,我通过理论学习和实践编程,掌握了Java语言的基础知识和一些关键概念,并成功应用到实际项目中。首先,我理解了面向对象编程的基本思想,比如类和对象、继承、多态、封装等,并能够在代码中灵活运用这些概念进行设计和实现。在项目实践方面,我做了多个涉及数据结构、算法和电路设计的任务,解决了很多编程中的实际问题,提升了自己的编程能力和问题解决能力。尤其是在电路模拟的项目中,我学会了如何把真实的电路模型转化成代码,掌握了电压、电流的计算和电路连接的实现。虽然在调试一些复杂问题时遇到了一些困难,但通过不断尝试和修改,我逐渐提高了代码的结构性和效率。此外,学习UML图、时序图等设计工具让我意识到,良好的设计对项目的成功非常重要。总的来说,这学期我不仅提升了编程技术,还学会了如何将理论与实践结合,未来我会继续在代码优化、调试技巧和项目设计方面加强自己的能力。
标签:题目,互斥,处理,blog3,开关,电路,电压,代码 From: https://www.cnblogs.com/Ansel09/p/18635436