第三次Blog

一.前言
第七次大作业相较于第六次大作业增加了互斥开关这一控制设备以及窗帘这一受控设备。但难度也是进一步提升。首先由于互斥开关关联两条路,以及对引脚的判断需求增大(需要判断那条路引脚为2,那条路引脚为3,以及判断引脚1在前或在后)。这就需要到对输入数据方法的优化。由于第六次大作业中我没有分析引脚而只是提取字母,因此此处要做改变。第八次大作业则要求到输出各个器件的输入电压和输出电压,并增加二极管这个算是控制设备,顺联相当于开关闭合,非顺联则相当于开关打开,但难度可谓是增加许多。因为要得到各个器件的输入电压和输出电压就需要对整个流程进行遍历考虑,以及对各个状况要有判别。同时还加入电流的判断,不过在对各个器件的电压考虑时自然就得出了它的电流,无需考虑更多。因此难点就在对各个器件电压的考虑以及获得。对于java的知识点并未增加考察,还是以接口以及抽象类的设计为准(使用到接口和抽象类可以使得程序更加简便可观)。但加大了对于整个流程的设计能力的考验,以及一些物理电路知识点的考察,比如断连时两端也有电压。是对我们设计能力的综合考虑,也是对逻辑思维的综合考验。
二.设计与分析
这里分为两部分分析,并对第八次大作业重点分析。
(1)第七次大作业
对比与第六次大作业,第七次大作业增加了互斥开关和窗帘,现在先对窗帘进行分析。
首先窗帘需要50V的电压才可以工作,对于电压的判断则跟之前的设计一致,在用电压遍历计算时无需改变太多。但窗帘的开放状态与整个电路的亮度有关,所以为了获得亮度就需要对整个电路再次遍历来获得各个器件的亮度,这里由于我设计的灯等设备类全部继承自受控设备类,因此就需要在受控设备类加上亮度这一属性,来方便我们进行遍历。而我在前几次大作业中是先给出总电压进行遍历计算之后再输出内容,因此对于亮度的获得仅需要在计算整个流程后加入遍历的方法即可,并不需要改变太多。
而第七次大作业真正的重点在于互斥开关。由于互斥开关关联两条路,且具有三个引脚。这里则需要对输入类进行更改,使之能够获取引脚数字来判别。同时可以对互斥开关增加一个属性来判别它接的哪个引脚。由于在之前大作业设计中对于设备状态更改部分,设计的是遍历所有电路的设备,依靠hashmap依据名称来对相应设备状态进行改变。比如题目中的#K1就需要对所有电路设备遍历来找出K1来进行状态的更改,虽然麻烦,但胜在对于之后的控制设备(题目中改变状态的均为控制设备)加入时不需要更改太多,因此可以将互斥开关分为两部分,在两条串联中的状态不同但名称相同,因此在遍历时能够同时更改在不同线路中的互斥开关的状态,实现对互斥开关状态的改变。同时也需要注意互斥开关以引脚2为准输出。并且将互斥开关分开后就可以当做两个开关,再计算。问题就算解决完毕,对于计算流程并未更改太多。
但由于在输出时有一定顺序,且互斥开关排在倒数第二位,窗帘排在最后一位。而在之前的作业中的排序顺序正好按照控制设备和受控设备来排序,但增加互斥开关和窗帘时却发生变化,因此需要重新设计排序类,又由于我设计所使用的hashmap存储,不得不将所有元素拿出后再存储到动态数组中,如此来实现依据题目要求排序。属于是个人设计问题,如此排序不需要改变hashmap存储方式,从而避免对整体设计的更改,虽然略显麻烦,但对之后增加的原件仅需要增加排序内容方法,利用同一个动态数组来存储即可,也算最优解。
此为设计的输出类,其中put方法用于将所有设备提取出来,sort方法用来将提取的设备按顺序放入动态数组中,finalString用来最后输出,即遍历动态数组同时调用所有设备(设计时)拥有的输出方法。

此则为设计的互斥开关类,其中的state代表在输入时互斥开关是引脚2在前还是引脚3在前,flag则代表互斥开关的开关状态。

(2)第八次大作业
首先先对二极管分析,顺接则无电阻,相当于开关,逆接则电阻无限大,相当于开关断开,得益于在第七次大作业输入时对于引脚数字的附带判断,因此该设备输入时的问题不难解决,只需要获取是引脚2在前还是引脚1在前。剩下的跟开关类似,由于二极管无法改变,所以不需要设计相应的改变状态的函数。
同时,在这次大作业中要求到对各个设备的电压判断,同时要注意输出时是按照引脚顺序输出电压,当引脚2在前时输出电压则需要反过来输出(设计时引脚1为输入电压,引脚2为输出电压,当引脚2在前时引脚2处的电压就变成输入电压,需要注意这个情况)。对于电压的判断,仅需要跟之前大作业设计的计算流程一样,输入个电压并且实时获取该电压的状态,这就考验到之前设计的计算流程是否完整。也得益于大作业七中设计的对引脚数字的附带判断,上述按引脚顺序输出电压的问题也迎刃而解。而对于电流的判断,由于之前设计的计算流程也包括对于各个串联(并联也是又多个串联组成的)的电阻的获取以及分压的获取,因此仅需要增加电流的获取方法即可(串联中各个设备电流一致,电流由电压除电阻获得)。对于电路的短路判断也较为简单,仅需要对各个串联进行分析,当一条串联的电阻为0时分压却不为0,则就是短路(在之前的设计中我对于电路中开关的状态增加了一个判别方法,当出现开关断开,即该串联断路,此时的所分电压被我设为0,因此短路判别可以轻松避开这个情况)。
三.踩坑与心得
主要踩坑在于第八次大作业,因此对第八次大作业进行重点分析。
(1)在第七次大作业中,主要踩坑点只在于对互斥开关的输出时没注意互斥开关以引脚2为主,因此在引脚3在前时且引脚2断开仍然输出闭合。解决方法也和简便,就是在放入动态数组之前对state进行判别,引脚为2的互斥开关才能够顺利放入。
(2)1.在第八次大作业中,踩的坑也有很多,由于一些特殊情况错误,而我并没有想出,这里只分析我已知的坑。而重点在于对互斥开关各个引脚电压的判别,由于互斥开关关联两条线路,就需要对各个线路的电压进行全部获取,但由于设计问题,这一部分很难实现,因此我只能将互斥开关单独拿出来考虑,又由于互斥开关被我拆成两部分,这两部分也相当于两个器件,因此也方便了我进行独立考虑。
不过踩坑也是由于设计的问题,在之前的设计中我是将引脚2的互斥开关部分存入动态数组中,而引脚3的互斥开关部分则被舍弃,因此对于互斥开关电压的判别出现问题。
2.第二个坑则主要在于一些基本的电路知识,比如断连电路的末端也有电压,而我没考虑到这个情况。
四.改进建议
计算方面设计的尚可,按照线路进行遍历即可,同时分析电压V的各个时候的值。而输出则就需要考虑到更多,比如将互斥开关单独拿出来考虑,情况分析则会变得更加简单,因此在输入时就可以创建一个互斥开关类型的数组,用来存储互斥开关三个引脚的状态,这样更方便输出。同时增加断连电路的判断,由于一般断连发生在并联中,因此需要对并联末端的电压进行考虑。最后考虑并联中存在并联的情况,由于并联由多个串联组成,在输入时其实可以将并联内的并联拆分为串联的数组,在存储到该并联的数组中,这样可以省去很多麻烦。
这段代码用于对这种情况进行考虑

不过个人能力有限,在第八次大作业中并未取得很好的分数,因此考虑到的也不多,所踩的坑知道的也并不多。
五.总结
重点在于第八次大作业,仅仅加入对于各个器件电压的输出,难度直线上升,也让我认识到之前设计的类以及方法存在非常多的问题,并没有很好解决第八次大作业给出的情况,甚至出现改不动的情况,因此这让我认识到自己的能力并未达到要求,对于类的设计依旧存在大量问题,逻辑并未理清,也未很好的培养出面向对象的思想。不过知道问题之所在才能更好的前进,不是吗。
六.建议
个人而言对于本学期并没有什么建议,这个模式很好,却是考验到学生的能力并激发学习性,希望可以更加完善下去。

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