第三次博客作业

前言

这次作业是在后面新的大作业上进行了两次迭代。

1.第七次大作业

这次大作业是模拟家居电路。设备总共分为两个大类:控制设备和受控设备。控制设备有开关,分档调速器,连续调速器,还有这次迭代增加的互斥开关。这些控制设备除了为了保护电路的互斥开关有电阻外,其余均无电阻。受控设备包括白炽灯,日光灯,吊扇,落地扇,和这次迭代新增的受控窗帘,它的开关大小与亮度有关,所以需要新写一个方法进行计算。这次的电路要求也进行了迭代,这次迭代考虑到了多个并联电路串联在一起的情况,而且一个串联电路中包含其他串联电路的情况。这次新的迭代主要是在电路的连接上面有了变化,也新增了一个受控设备和控制设备。这次的的过程需要更加严谨,需要思路更加清楚,需要进行有效的梳理再进行编译,否则容易混乱,所以这次大作业对我来说难度比较大。

2.第八次大作业

此次大作业在上一次的基础上改变了很多,增加了很多考验思维逻辑的内容。增加管脚电压的显示在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压。这点非常考验思维能力,也考验细心程度。稍不注意就会产生计算错误。电流限制,电器在工作时,过大的电流会引起电器过热,从而烧坏电路。本次迭代,每个元器件都有最大电流的设置,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”,与前面的信息之间用英文空格分隔。最大限定电流:开关20、分档调速器18、连续调速器18、白炽灯9、日光灯5、吊扇12、落地扇14、互斥开关20、受控窗帘12、二极管8。短路检测。如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”。并联电路中包含并联。本次迭代考虑并联电路中包含并联电路的情况,即构成并联电路的串联电路可以包含别的并联电路。二极管。增加二极管元件,其电路特性为:正向导通,反向截止;其电器符号如图4所示,当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。这次的电路更加复杂,对我来说是一个很大的挑战,所以我花了大量的时间去想样例以及如何编写。

设计与分析

以下是我对每个大作业代码的代码分析。

1.第七次大作业


这次主要增加的分为两个方面,一个是设备方面的,一个是电路方面的。
设备方面主要是增加了两个设备:互斥开关和受控窗帘。互斥开关因为可以在并联电路中也可以在串联电路中,一个并联电路中也可以有多个互斥开关,互斥开关每一个引脚的电阻不同,因为太复杂所以我想到可以将互斥开关的两个引脚当作两个新的开关并设置这两个开关的电阻,比如在输入时输入了H3-2,我便将这个名字作为开关名称以便区别于K,并且根据“-”后面的数字来设置这两个开关的电阻,再将这两个开关存进互斥开关的对象中,这样在后面对互斥开关的改变时可以直接找到相应的互斥开关再将互斥开关中的两个开关的状态进行改变。这样写的好处是可以不用更改以前代码中判断电路状态和总电阻的方法,但是要注意区别不同互斥开关所对应两个小开关的名字,以便后面进行调用。受控窗帘就比较好写,他的初始开度是全开,然后根据亮度逐渐升高来减小窗帘的开度。由于规定了亮度不受到外界的干扰,至于电路中的两种灯发出来的亮光有关,所以在设置窗帘开度时只需要遍历所有灯的亮度进行累加,再将累加的数据进行输入窗帘的改变开度的方法中。但是需要注意在输出时使用百分比进行输出,所以不能直接输出开度,需要判断开度大小换算成百分比再进行输出。
电路方面主要也是进行了两个变化:一个是并联电路的改变和串联电路中可以包含一个电路。由于考虑到下一次的迭代,所以在这次大作业我就将并联电路进行了改进,可以实现并联包含并联,即将M当作一个子类继承设备类让他与其他设备一样进行遍历,电阻和状态都是根据父类进行重写,再将它分的的电压输入M中,也是在改变它的特性的同样名称的方法中开始遍历M中的Line,判断他们的状态,如果是通的则再遍历这条Line中的所有设备,再进行分压、进行运算。这样写的话就不用考虑是否有M,再将M进行单独运算,可以直接一层层的递归,直到运算完电路中的所有电器。串联电路包含电路其实比较好改,也是将Line这个类继承设备类,再将方法进行重写,将他的改变特性的方法和得到状态的方法。这样分到电压后进入改变特性的方法里遍历Line对象的所有电器进行分压,最后在输出所有设备时将所有电器进行排列计算进行输出。

2.第八次大作业


此题设计同上一次的设计基本类似,只是在上一次的基础上在每个类中增加了一个变量p,用于记录设备的引脚便于后续判断两端电压,增加了一个二极管“P”类,“P”类中放了一个ArrayList ls用于存放p所在的那条路。虽然此次设计与上次类似,但我仍在上次的设计上进行了一些修改:
在每个类中增加变量p用于存放第一个出现的引脚(不相同的是互斥开关),并且在Zong类中增加“v1”“v2”“v3”(只有H需要用到v3),来记录两端电压
互斥开关:虽然仍是用p表示第一次出现的引脚但是若第一次出现的引脚不是“1”号,那就用H类中的开关的p记录第一次出现的引脚。
在Zong类中增加了一个checkI(double V)和check变量用于判断设备的电流是否超过最大电流,但是P和K类重写了checkI()方法,因为他们的电阻是0,需要用整条路的电流来判断
由于在上次编写代码的过程中就已经考虑到这次的迭代,所以“并联中包含并联”的情况在上一次的迭代中就已经判断。
可以按如下进行修改首先同上一次一样创建链表并读取,只是在读取信息并对信息进行拆分的时候进行了一定的修改:不仅要读取name还要读取他的引脚并且将第一次出现的引脚存放到p变量中去。与上次出现明显差异的地方是:(1)新用了一个变量vn来对两端的电压进行计算,首先让vn=v,找到主路后计算主路中设备的电压并让vn逐次递减。(2)新增一个判断,若主路的state=1并且getR=0,此时输出“short circuit error”并结束整个程序。(3)在对M进行计算时每次循环的开始都让vn=m.v1然后一次进行计算。(4)输出时先调设备的p变量若p=1则比较v1与v2的大小,先输出较大者再输出较小者反之也相同。(4)两端电压后还需判断设备的check变量是否为0,为0则输出“exceeding current limit error”表示通过他的电流超过最大限定电流

踩坑心得

1.第七次大作业

因为将H分为了两个开关而没有将H存进这条电路的电器链表中,而改变H状态的方法仅仅是改变了H状态这个属性,而没有改变电路的状态就没有进行修改两个开关的状态。所以在后面改变H的状态的时候结果有误,需要按如下修改H的change函数就可以了
未写好所有设备状态的函数,以为没达到电压就将它的状态设为关闭,导致后面判断电路状态时有误
需要像如下修改所有的change函数
未看清题目要求,需要将窗帘的开度全部化为百分比,需要修改输出为如下

2.第八次大作业

计算二极管的最大电流事判断错误,将“8”写成“18”导致最终判断结果错误,需改为如下代码
在并联电路且有通有不通的时候应该将不同的电路从不通的那个电器往后都和并联末尾的电压相同,前面的与前面的相同,需要将代码改为如下

改进意见

1.编写清晰和详尽的文档、注释和README文件,说明代码的用途、实现细节、关键设计决策等。良好的文档能够帮助他人理解和使用你的代码。
2.在编写代码之前需要画好类图,否则写代码时就会出现调用关系不清晰等问题。
3.在编写代码之前先考虑测试用例,并遵循测试驱动开发的方法。编写高质量的单元测试可以帮助验证代码的正确性,减少潜在的bug,并提升代码的可靠性和可维护性。
4.学习和应用编程最佳实践,如单一职责原则、开闭原则、依赖倒置原则等,以及常见的设计模式,能够帮助你写出更具扩展性、可维护性和可重用性的代码。
5.在测试用例的时候发现bug就要及时修改,不能只顾着测试点的修改,要尽力将整个代码的bug全部修改出来
通过遵循这些建议,你可以编写出更高质量、可维护和可扩展的代码,提升自己作为开发者的技能水平和职业发展

总结

收获

1.在第七次迭代时考虑到了第八次会并联包含并联所以在这次迭代中就进行了修改,所以在第八次迭代时就省去了时间去考虑这种情况。
2.学会了不要将一个设备就最为一个设备进行判断,可以根据这个设备的特性与别的设备进行融合,比如在互斥开关的设置时可以将其与开关进行关联再在其基础上增加电阻再存进相应的类型中。
3.随着代码越来越长需要考虑的东西越来越多,所以现在养成了先理清思路再进行编译的好习惯,所以在后面编译有着清晰的思路。
4.由于大部分没有给出样例的提示,所以考验我们自己思考的能力,让我们自己思索应该注意些什么,也有利于我们理清我们的思路。

不足

1.由于物理知识已经很久没有用过了,所以在编译时会出现很多问题,比如这次的并联电路中有路是通的,有路是断的,就需要找断的那个点,断开前的需要与并联电路前端电压相同,断开后的需要与并联电路后端相同。
2.未考虑到开关等设备无电阻,所以在判断是否超过限制电流时想直接使用它的电压除以它的电阻,这样就会导致输出错误,所以需要考虑更多不同的情况。

课程改进意见

对于教师、课程、作业、实验、课上及课下组织方式等方面,我认为可以提出以下改进建议:
1.教师可以及时更新教学内容,跟上行业最新的发展和趋势,让学生学到最新的知识和技能。
2.作业应该设计合理,能够巩固学生所学的知识和技能,同时不要过于繁重,以免影响学生的学习效果。
3.实验室的硬件设施和软件环境应该得到改善和完善,保证学生能够顺利进行实验和项目开发。
4.在课堂上可以增加更多的互动环节,让学生参与到课堂讨论和问题解决中,提高学生的学习积极性。
5.学校可以提供更多的课下学习资源,比如在线课程、教学视频等,帮助学生更好地学习和掌握知识。

posted @   郁郁症  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示