第7-8次大作业BLOG

前言

知识点:两次题目list和map来储存数据,正则表达式解析题目输入以及输入输出等Java的基本操作。
两次题目集的题量都很少,只有一道题。
第七次题目集的难度较难,第八次题目集非常难。

第七次大作业

设计与分析

本次题目在上一次题目的基础上加入了互斥开关和受控窗帘,并且电路中包含多条并联电路,以及串联电路中包含其他串联电路。我认为本次题目的一个难点是互斥开关的设计。互斥开关接不同引脚时的电阻不同,因此在互斥开关这个类中要有一个方法来判断开关所接的引脚是哪个并判断它们的电阻。互斥开关的本质是一个开关,因此我让互斥开关继承了控制设备。并且与开关不同的是互斥开关的类里面有一个N来接收互斥开关的引脚,其他地方都与开关基本相同。互斥开关的输入与其他元件的输入不同,因此我单独用了一个循环来判断互斥开关和判断它的引脚。数控窗帘的输入方式与其他元件一致。由于本次串联电路中会包含其他串联电路,但是但是串联类中计算电压和判断开闭的方法不会改变。

踩坑经验

1、没有考虑串联电路中包含并联电路的情况。所以会有一些测试点无法通过。
2、把M开头的并联电路的list放在了main方法外面,这样的话当有多条并联电路时并联电路的list的内容就不会更新,还会把之前的并联电路所包含的元件包括在后面的所有的并联电路中,因此并联电路的list应该放在循环里面,这样就可以保证每一个并联电路的list里的内容都是本次并联电路的元件。
3、H开关应该将2引脚和3引脚一起存入H开关类中,而我开始并直接判断H开关状态,打开连2引脚,关闭连3引脚,这样的话3引脚在上面,2引脚在下面的情况就会出错。改进之后H类里面有一个N,用来存储H所接的引脚,并且在H类中判断N的值,然后给出相应的电阻。
4、由于要在输入时就判断H开关连接的引脚,因此H的判断要与其他元件分开,单独用一个循环判断。并且这个循环的i不是跟其他的循环一样i+=2,而是i++,因为1号引脚与2,3号引脚的顺序没有固定所以i+=2的话会有些情况无法包含。而i++当H的引脚不等于1时再将H开关存入。其实这种方法也不是最好的,在下次作业中我才发现这样做相当于存了两个开关,会影响下次的作业。

改进建议:

1、在本次作业中就将H改为一个开关的形式,这样在下次作业中极大地简化了H开关的引脚判断。
2、将输入改为一个方法,由于题目中要求输入的类型特别多,并且每种类型的输入基本相同,因此可以将输入写为方法,每次调用输入方法就避免了大量的相同的代码。

第八次大作业

设计与分析

本次作业在上次作业的基础上增加了好多内容,首先输入设备中增加了二极管,并且本次作业的并联电路中可以包含并联电路,输出中还要输出每个设备的输入电压和输出电压,并且还要计算电流,每个设备都有自己的最大电流,超过最大电流时要输出提示,并且还要考虑是否短路的情况。二极管有两种状态,正向导通,反向截止,导通时电阻为零,电流从右至左流动时,电阻无穷大相当于开关打开。其实二极管的本质上就是一个开关。只要判断出二极管的正向接通还是反向截止就相当于开关的闭合与断开。首先要在main方法中判断电路是否接通,并且电阻是否为零,如果是的话,那就短路,如果不是的话就正常输出。在串联类中要增加计算主电路的电流和其他串联电路的电流的方法,并且还要计算串联电路中每个元件的引脚电压,应交电压只要计算出每一条串联电路初始的电压当电流经过每一个元件时,输入引脚的电压就是原来的电压,而输出引脚的电压就是输入引脚的电压减去元件自身电压。这样就可以得到。每个元件的输入电压和输出电压。并联电路中也要增加这些方法。当某个元件时互斥开关时,首先要判断互斥开关的引脚是哪个,然后再判断互斥开关是否接通,最后再判断互斥开关是正接还是反接,就可以得到他输入引脚与输出引脚的电压。互斥开关的输入电压与输出电压是本题中最难判断的一个地方。本题中每个元件的输出都要分两种情况,当电流大于元件自身的最大电流与小于元件自身的最大电流时的输出不同,因此要判断元件的电流与其自身最大电流的大小。

踩坑经验:

1、上次作业中我将互斥开关的输入单独放在一个循环中,其他元件放在一个循环中,这样就会导致一个H开关会存两遍,且他们的名字相同,在map中后一个开关就会覆盖掉前一个开关,导致H中只有两个引脚1和2或1和3,在输出时就无法输出三个引脚的电压。因此,为了解决这个问题,我在H类中加了一个类型为H的属性,并且将H与其他元件放在同一个循环中将i=i+2改为i++,使用containsKey()方法判断map中是否含有这个名字的元件,如果有H,则另外创建一个H类,并将后一个H放在前一个H中,而其他元件则是若map中不包含就创建相应的类。这样就可以避免了所有会出错的情况。
2、二极管P中没有判断是否反接的属性,虽然不影响判断二极管的闭合与断开,但是在输出电压时就无法判断引脚的编号,因此,在减去自身电压就会出现错误。所以,我在P类中增加了一个Boolean类型的属性,判断二极管是否反接,然后再输出相应引脚的电压。
3、关于继承的知识点不够清晰,我在父类中定义了u1和u2分别表示输入引脚和输出引脚的电压,但是我又在每个子类中又重复定义了u1和u2,这会导致输出时混乱引起错误。
4、在计算电压的过程中我原本是先计算出每条串联电路的初始电压,再依次减去每个元件的电压,前一个元件的输出电压就是这个元件的输入电压,并且每个元件的电压用电流乘电阻的方法计算,但是后来发现当串联电路是断路时就无法正确判断电压,开关之前的电压正常,而之后的电压就应该为0,但是这种情况就不好判断,因此,我将电压的判断改为由最开始的220v依次相减。
其实还有好多小错误,我就不一一列举啦~~~(以后会改正的)

改进与建议:

还是代码可复用性低的问题吧,比如说输入的正则表达式,我感觉完全可以放在一个方法中,这样就可以大大缩减代码的数量。还有就是希望以后在写代码之前就可以条理清晰地分析题目,而不是急急忙忙就开始写,也许有清晰的思路在后续过程中可以少走很多弯路,避免很多错误,提高效率。

总结

我认为本次作业的难度确实有点大,并且在期末周,但是还是花了很多时间去完成本次作业的,虽然最后并没有那很高的分数,通过这次作业,我又一次巩固了本学期所学习的知识点。

学期结语

这学期过的好快,在我印象里就写了两次作业就结束了(答题判题程序和电路模拟程序),但是就是这两次作业,我感觉我的编程能力得到了很大提高,当然还有五次实验的功劳。然后我好像也没有什么改进建议,虽然作业与实验的难度对我来说很大,但是就是这些作业与实验让我认识到自己的提升空间多么巨大,我和其他同学之间的差距有多大。并且我认为学堂在线的存在也很有必要,能够让我们在课前就了解要学习的内容,上课时就能更高效率地学习。

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