- 在我看来,题目集7~8知识点在于类的使用,方法的调用,通过不同类的ArrayList的使用将所有元件信息录入,通过连接方式将其变成一条电路,从而进行计算和使用,题量不大,只有一道题,在精不在多,难度适中,可以接受并且能够编程写出,完成功能的实现。
- 题目集七:
题目集7在题目集6的基础上增加了两个新的元件:互斥开关和受控窗帘;
互斥开关,顾名思义,就是相互排斥的,所以其是拥有两个开关引脚,一个接通,另一个就断开。例如:左边是汇总引脚,编号为1;右边两个是分支引脚,右上的输出引脚为2,右下输出引脚为3。1、2、3引脚均可以是输入引脚,当1为输入引脚时,2、3引脚为输出引脚;1为输出引脚时,2、3引脚为输入引脚。互斥开关只有两种状态:开关接往上面的2号引脚、接往下面的3号引脚。开关每次只能接通其中一个分支引脚,而另一个分支引脚处于断开状态。互斥开关的默认状态为1、2引脚接通,1、3引脚断开。互斥开关可以反过来接入电路,即汇总引脚接往接地端,两个分支引脚接往电源端。这样便清楚了互斥开关的作用,然后将其功能实现。因为其本质是开关,而且还是两个开关,由此,借由此,我首先测试了使用一个互斥开关控制两条路,但是结果却不尽如人意。因此,我转而使用了两个开关代替互斥开关,这样就能解决无法控制两端通路的问题。两个开关,通过名字中的2或3判断是哪一个,再通过状态closed和turned on转换开关状态,实现互斥,这样就完成了互斥开关的设计。
其次,受控窗帘,这不仅仅是单个元件电压电流可以判断的,关系到了其他的电路元件,比如:日光灯和白炽灯,受到其所发出的光照强度lum所影响,受控窗帘打开程度不同,因此,设计的时候需要在总电路上设置一个getLux()方法去获得电路总体光照强度,再通过受控窗帘自身类中设置一个getOpen()方法去获得其打开程度(打开程度根据题意反馈),但是要记得电压问题,因为受控窗帘对电压有特定要求当电压低于50V,窗帘不工作,默认为全开状态,如果电路中没有灯或者灯全部关闭,光照强度为0,窗帘处于全开状态,由此还要再getOpen()方法中获得电压咋再判断;写出其他电压,电流等属性,就完成了受控窗帘类的编写。
这次作业还增加了一个电路要求:本次迭代考虑多个并联电路串联在一起的情况。
本题考虑一条串联电路中包含其他串联电路的情况。例如:
即#T3:[VCC K1-1] [K1-2 T2-IN] [T2-OUT K2-1] [K2-2 T1-IN] [T1-OUT GND]
本例中T1\T2两条串联电路T3的一个部分,本题考虑这种类型的输入。
对此,我的判断是在原本串联电路T中设置ArrayList
类分析
题目集7的类如图:
- 题目集八:
题目集8增加了多个功能:
- 增加管脚电压的显示:在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压
- 电流限制:电器在工作时,过大的电流会引起电器过热,从而烧坏电路。每个元器件都有最大电流的设置,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”。
- 短路检测:如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”。
- 并联电路中包含并联:考虑并联电路中包含并联电路的情况,即构成并联电路的串联电路可以包含别的并联电路。例如如下输入的电路,并联电路M2的其中一条串联电路T4中包含了另一条并联电路M1:
即#T1:[IN D2-1] [D2-2 H1-2] [H1-1 OUT]
即#T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]
即#M1:[T1 T2]
即#T4:[IN K3-1] [K3-2 M1-IN] [M1-OUT OUT]
即#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]
即#M2:[T4 T5] - 增加二极管元件,其电路特性为:正向导通,反向截止;当正向流过时,二极管导通”conduction”,电阻为0;电流反向流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。但是注意:二极管如果两端电压相等,没有电流流过,分以下两种情况输出:如果两端电压为0,二极管的导通/截止状态由接入方向决定,1号引脚靠近电源则状态为导通,反之为截止;如果两端电压不为0,二极管导通。
首先,增加一个新的元件,二极管本质上还是一个开关,由于其电流不同的流通方向导致其开关的closed和turned on不同,可以通过其名字后缀加上“1”“2”实现state判断二极管开关状态,再进行元件信息的输出即可。
对于电流限制即可从各个元件类里增加maxI说明最大电流,通过getI()方法实现该元件电流的获取,再在输出中判断是否超过最大电流,根据题目相应信息输出该元件相应的电压和是否电流过大。
短路检测本质上是检测该段电路通路时电阻是否为0,当且仅当state=1并且R=0时该段电路的电流无限大,造成电路短路。
管脚电压输出不成问题,但是注意:当元件输入引脚为2输出引脚为1时输出信息要做出相应改变,如此以获得正确的管脚电压输出。
最后来到并联电路包含并联中来,这其实也只是串联电路包含并联电路,只不过是进行了两次然后实现并联包含并联,其实依照上一次的串联包含并联即可解决。
类说明
题目集8类图说明如图:
- 题目集七:
题目集7中增加的互斥开关,本来是想着设计成两个开关同时控制两条电路庚饭方便,但事实证明在后面的迭代中使用一个开关更方便,这样在输出管脚电压时就不许需要反复判断是否为同一个互斥开关,1,2,3引脚电压该怎么通过不同的名字去实现对应的电压输出。其次,因为互斥开关具有三个引脚,每个引脚的电压可能都不同,这样就需要去判断是否有电压流过等等问题,实现此类功能的难度就更大了。
受控窗帘一开始的打开度完全错误,Debug之后发现是要进行一次总的电路结算。对于每一条串联电路T都可以实现光照强度的获得,但是最后还要进行总的计算,不然数据会稍有偏差。
- 题目集八:
题目集8因为所加功能比较多,所以踩坑也是很容易,每条电路信息录入后都需要计算然后更新再计算,这样才能获得准确信息。比如:并联里面包含并联电路,因为它是由串联电路包含并联电路的多次迭代从而实现并联包含并联,如果不进行每一条电路的更新,计算方面的错误就会非常多。
输出管脚电压时容易输入输出反着输。由于一开始给的属性中时c1,c2.如此表示输入输出电压后,便无需判断输入输出引脚问题,直接输出就可。但此时需要按顺序输出引脚1和引脚2的电压,就需要考虑前后问题,增加了繁杂的判断才可输出。
因为所有电路我都设置了state,如果state=0,电路是断开的,初始电压就为0,但是这跟题目不符合,题目是要只有断开时,输入电压还是电路一开始的初始电压,但是输出电压为0;因此,又要修改Calculate()方法实现对应的功能。
- 题目集七:
将互斥开关改成单个开关进行两条电路的连接,而不是利用两个开关控制两条电路。
总电路进行更新再计算以获得受控窗帘打开度的准确获取。 - 题目集八:
所有元件进行名字更改,以便进行引脚电压输出。
并联电路包含并联时,电路进行更新以获得准确数据。
Calculate()方法中加入限制,只有到控制类元件时,state=0或者转换出来的电压为0电压才开始变化,并且设置Volt变量不断去改变电压,获得实时电压,进行电压有效传输。
题目集7~8知识点覆盖仍然和之前相同,在类的使用上已经大致掌握了,在继承类,抽象类等的使用也更加得心应手。题量在分析中显得功能增加的有些多,但其实总体来说还OK。总之,学到了写编程之前先列大纲,讲需求,配硬件分蓬蒿每个类及其方法,最后进行完善写出完整的带有题目所需功能的编程。
本门课程采用课前预习,课上老师讲解题目将会使用到的方法,课后布置习题以提高对学生对知识的掌握度,最后合理安排时间让我们写总结性blog,使我们对知识点的印象更加深刻,我觉得这样的方法非常好。不仅仅是学到知识,还学会了如何使用以及熟练掌握并且运用,这是非常好的。所以,并没有什么建议可以提出。