- 前言
本次题目集的题量少,但是难度较高,尤其是题目集8. - 设计与分析
题目:
智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能。请根据如下要去设计一个智能家居强电电路模拟系统。以下题目介绍中加粗的部分为本次迭代在“家居强电电路模拟程序-3”的基础上增加的功能要求。
1、控制设备
本题模拟的控制设备包括:开关、分档调速器、连续调速器、互斥开关。
开关:包括0和1两种状态。
开关有两个引脚,任意一个引脚都可以是输入引脚(接往电源端),而另一个则是输出引脚(接网接地端)。开关状态为0时,无论输入电位是多少,输出引脚电位为0。当开关状态为1时,输出引脚电位等于输入电位。
互斥开关:
互斥开关有3个引脚:1个是汇总引脚,另两个是分支引脚。
开关电路示意图如图1所示,左边是汇总引脚,编号为1;右边两个是分支引脚,右上的输出引脚为2,右下输出引脚为3。图中1、2、3引脚均可以是输入引脚,当1为输入引脚时,2、3引脚为输出引脚;1为输出引脚时,2、3引脚为输入引脚。
互斥开关只有两种状态:开关接往上面的2号引脚、接往下面的3号引脚。开关每次只能接通其中一个分支引脚,而另一个分支引脚处于断开状态。
互斥开关的默认状态为1、2引脚接通,1、3引脚断开。
图1中所示的互斥开关可以反过来接入电路,即汇总引脚接往接地端,两个分支引脚接往电源端。
image.png
图1 互斥开关
为避免短路,互斥开关设置了限流电阻,1、2引脚之间默认电阻为5,1、3引脚之间默认电阻为10。
分档调速器
按档位调整,常见的有3档、4档、5档调速器,档位值从0档-2(3/4)档变化。本次迭代模拟4档调速器,每个档位的输出电位分别为0、0.3、0.6、0.9倍的输入电压。
连续调速器
没有固定档位,按位置比例得到档位参数,数值范围在[0.00-1.00]之间,含两位小数。输出电位为档位参数乘以输入电压。
所有调速器都有两个引脚,一个固定的输入(引脚编号为1)、一个输出引脚(引脚编号为2)。当输入电位为0时,输出引脚输出的电位固定为0,不受各类开关调节的影响。
开关、调速器的初始状态/档位为0。
开关的两个引脚编号为1、2。
除互斥开关外,其他控制设备的电阻为 0。
2、受控设备
本题模拟的受控设备包括:灯、风扇。两种设备都有两根引脚,通过两根引脚电压的电压差驱动设备工作。
灯有两种工作状态:亮、灭。在亮的状态下,有的灯会因引脚电位差的不同亮度会有区别。
风扇在接电后有两种工作状态:停止、转动。风扇的转速会因引脚间电位差的不同而有区别。
本次迭代模拟两种灯具。
白炽灯:
亮度在0~200lux(流明)之间。
电位差为0-9V时亮度为0,其他电位差按比例,电位差10V对应50ux,220V对应200lux,其他电位差与对应亮度值成正比。白炽灯超过220V。
日光灯:
亮度为180lux。
只有两种状态,电位差为0时,亮度为0,电位差不为0,亮度为180。
本次迭代模拟两种风扇。
吊扇:
工作电压区间为80V-150V,对应转速区间为80-360转/分钟。80V对应转速为80转/分钟,150V对应转速为360转/分钟,超过150V转速为360转/分钟(本次迭代暂不考虑电压超标的异常情况)。其他电压值与转速成正比,输入输出电位差小于80V时转速为0。
落地扇:
工作电压区间为 80V-150V,对应转速区间为 80-360 转/分钟;[80V,100V) 对应转速为 80 转/分钟;[100,120)V 对应转速为 160 转/分钟;[120,140)V 对应转速为 260 转/分钟;大于等于 140V 转速 为 360 转/分钟(本次迭代暂不考虑电压超标的异常情况)。
本次迭代模拟一种受控窗帘:
受控串联的电路符号为S,其最低工作电压为50V,电压达到或超过50V,窗帘即可正常工作,不考虑室外光照强度和室内空间大小等因素,窗帘受室内灯光的光照强度控制。
当电路中所有灯光的光照强度总和在[0,50)lux范围内,窗帘全开;
在[50,100)lux范围内,窗帘打开比例为0.8;
在[100,200)lux范围内,窗帘打开比例为0.6;
在[200,300)lux范围内,窗帘打开比例为0.4;
在[300,400)lux范围内,窗帘打开比例为0.2;
在400lux及以上范围内,窗帘关闭。
当电压低于50V,窗帘不工作,默认为全开状态。
如果电路中没有灯或者灯全部关闭,光照强度为0,窗帘处于全开状态。
受控设备电阻:白炽灯的电阻为 10,日光灯的电阻为 5,吊扇的电阻为 20,落地扇的电阻为 20,窗帘电阻为15。
3、输入信息
1)输入设备信息
分别用设备标识符K、F、L、B、R、D、A、H、S、P分别表示开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、落地扇、互斥开关、受控窗帘、二极管(见第6部分说明)。
设备标识用标识符+编号表示,如K1、F3、L2等。
引脚格式:
设备标识-引脚编号,例如:K1-1标识编号为1的开关的1号引脚。
开关、分档调速器、连续调速器的两个引脚编号为1、2。
受控设备的两个引脚编号分别为1、2。
互斥开关的引脚编号已经在互斥开关的介绍部分说明。
约束条件:
不同设备的编号可以相同。
设备信息不单独输入,包含在连接信息中。
2)输入连接信息
一条连接信息占一行,用[]表示一组连接在一起的设备引脚,引脚与引脚之间用英文空格" "分隔。
格式:
"["+引脚号+" "+引脚号+"]"
例如:[K1-1 K3-2]表示K1的1号引脚,K3的2号引脚连接在一起。
约束条件:
不考虑调速器串联到其他调速器的情况。
考虑各类设备的并联接入。例如,K1 的输出接到 L2 的输入,L2 的输出再接其他设备属于串联接线。K1 的输出接到 L2 的输出,同时 K1 的输入接到 L2 的输入,这种情况属于并联。
连接信息不单独输入,包含在线路信息中。
3)输入控制设备调节信息
开关、互斥开关调节信息格式:
#+设备标识K+设备编号,例如:#K2,代表切换K2开关的状态。
#+设备标识H+设备编号,例如:#H2,代表切换H2互斥开关的状态。
分档调速器的调节信息格式:
#+设备标识F+设备编号+"+" 代表加一档,例如:#F3+,代表F3输出加一档。
#+设备标识F+设备编号+"-" 代表减一档,例如:#F1-,代表F1输出减一档。
连续调速器的调节信息格式:
#+设备标识L+设备编号+":" +数值 代表将连续调速器的档位设置到对应数值,例如:#L3:0.6,代表L3输出档位参数0.6。
4)电源接地标识:
VCC,电压220V,GND,电压0V。没有接线的引脚默认接地,电压为0V。
5)输入串联电路信息
一条串联电路占一行,串联电路信息由 n 个连接信息组成,连接信息按从靠电源端到接地端顺序依次输入,连接信息之间用英文空格" "分隔。
串联电路信息格式:
"#T"+电路编号+":"+连接信息+" "+连接信息+...+" "+连接信息
例如:#T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT] 一个串联电路的第一个引脚是 IN,代表起始端,靠电源。最后一个引脚是 OUT,代表结尾端, 靠接地。
约束条件:
不同的串联电路信息编号不同。
输入的最后一条电路信息必定是总电路信息,总电路信息的起始引脚是 VCC,结束引脚是 GND。
连接信息中的引脚可能是一条串联或并联电路的 IN 或者 OUT。例如:
#T1:[IN K1-1] [K1-2 T2-IN] [T2-OUT OUT]
#T1:[IN K1-1] [K1-2 T2-IN] [T2-OUT M2-IN] [M2-OUT OUT]
6)输入并联电路信息
一条并联电路占一行,并联电路由其包含的几条串联电路组成,串联电路标识之间用英文空格" "分隔。
格式:
"#M"+电路编号+":"+”[”+串联电路信息+" "+....+" "+串联电路信息+”]”
例如:#M1:[T1 T2 T3]
该例声明了一个并联电路,由 T1、T2、T3 三条串联电路并联而成,三条串联电路的 IN 短接在一起构成 M1 的 IN,三条串联电路的 OUT 短接在一起构成 M1 的 OUT。
在本题中,并联电路M中的串联电路可以包含别的并联电路。
约束条件:
本题不考虑输入电压或电压差超过220V的情况。
输入信息以end为结束标志,忽略end之后的输入信息。
本题中的并联信息所包含的串联电路的信息都在并联信息之前输入,不考虑乱序输入的情况。
只要不因短路而造成无穷大的电流烧坏电路(如电路中的部分短接),都是合理情况。
本次迭代考虑多个并联电路串联在一起的情况。
本题考虑一条串联电路中包含其他串联电路和并联电路的情况。例如:
#T3:[VCC K1-1] [K1-2 T2-IN] [T2-OUT K2-1] [K2-2 T1-IN] [T1-OUT GND]
本例中T1\T2两条串联电路是T3的一个部分,本题考虑这种类型的输入。
4、输出信息:
按开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、互斥开关、受控窗帘、二极管(见第6部分说明)的顺序依次输出所有设备的状态或参数。每个设备一行。同类设备按编号顺序从小到大输出。
输出格式:
@设备标识+设备编号+":" +设备参数值(控制开关的档位或状态、灯的亮度、风扇的转速,只输出值,不输出单位)+" "+设备所有引脚的电压(按编号从小到大顺序依次输出,电压的小数部分直接丢弃,保留整数输出,电压之间用”-”分隔)
说明:
连续调速器的档位信息保留两位小数,即使小数为0,依然显示两位小数.00。
开关状态为0(打开)时显示turned on,状态为1(合上)时显示closed
如:
@K1:turned on 32-15
@B1:190 68-17
@L1:0.60 220-176
互斥开关按1、2引脚的接通状态显示,1,2接通-1,3断开时显示closed,1,3接通-1,2断开时显示turned on。
如:
@H1:turned on
受控窗帘显示窗帘打开的百分比,如:
@S1:80%
5、家居电路模拟系列所有题目的默认规则
1)当计算电压值等数值的过程中,最终结果出现小数时,用截尾规则去掉小数部分,只保留整数部分。为避免精度的误差,所有有可能出现小数的数值用double类型保存并计算,不要作下转型数据类型转换,例如电压、转速、亮度等,只有在最后输出时再把计算结果按截尾规则,舍弃尾数,保留整数输出。
2)所有连接信息按电路从靠电源端到靠接地端的顺序依次输入,不会出现错位的情况。VCC/IN一定是第一个连接的第一项,GND/OUT一定是最后一个连接的后一项。
3)连接信息如果只包含两个引脚,靠电源端的引脚在前,靠接地端的在后。
4)调速器的输入端只会直连VCC,不会接其他设备。整个电路最多只有连接在电源上的一个调速器,且不包含在并联单路中。
5)本系列题目中元件的管脚除了互斥开关的1引脚,其他所有引脚在电路中最多只出现一次。
6、本题新增内容:
1)增加管脚电压的显示
在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压。(格式详见输出信息部分)
2)电流限制
电器在工作时,过大的电流会引起电器过热,从而烧坏电路。本次迭代,每个元器件都有最大电流的设置,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”,与前面的信息之间用英文空格分隔。
例如:@B1:190 68-17 exceeding current limit error
本题各类电器的最大限定电流如下:
开关20、分档调速器18、连续调速器18、白炽灯9、日光灯5、吊扇12、落地扇14、互斥开关20、受控窗帘12、二极管8。
3)短路检测
如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”
4)并联电路中包含并联
本次迭代考虑并联电路中包含并联电路的情况,即构成并联电路的串联电路可以包含别的并联电路。例如如下输入的电路,并联电路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]
5)二极管
增加二极管元件,其电路特性为:正向导通,反向截止;其电器符号如图4所示,当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。
image.png
图2 二极管符号
二极管的标识符为’P’,左侧管脚编号为1,右侧管脚编号为2。
二极管如果两端电压相等,没有电流流过,分以下两种情况输出:
1、如果两端电压为0,二极管的导通/截止状态由接入方向决定,1号引脚靠近电源则状态为导通,反之为截止。
2、如果两端电压不为0,二极管导通。
7、设计建议
本题包含以下电路图中的所有连接情况:
image.png
图3 电路示意图
1、电路设备类:描述所有电路设备的公共特征。
2、受控设备类、控制设备类:对应受控、控制设备
3、串联电路类:一条由多个电路设备构成的串联电路,也看成是一个独立的电路设备
4、并联电路类:继承电路设备类,也看成是一个独立的电路设备
其他类以及类的属性、方法自行设计。
image.png
图4:建议设计类图
输入样例1:
在这里给出一组输入。例如:
#T1:[IN P2-2] [P2-1 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]
#T3:[VCC K2-1] [K2-2 M2-IN] [M2-OUT GND]
#K1
#K2
end
输出样例1:
在这里给出相应的输出。例如:
@K1:closed 220-220 exceeding current limit error
@K2:closed 220-220 exceeding current limit error
@K3:turned on 220-0
@B1:200 220-0 exceeding current limit error
@D1:0 0-0
@H1:closed 0-0-0
@P2:cutoff 0-0
输入样例2:
在这里给出一组输入。例如:
#T1:[IN P2-1] [P2-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]
#T3:[VCC K2-1] [K2-2 M2-IN] [M2-OUT GND]
#K1
#K3
#K2
end
输出样例2:
在这里给出相应的输出。例如:
@K1:closed 220-220 exceeding current limit error
@K2:closed 220-220 exceeding current limit error
@K3:closed 220-220 exceeding current limit error
@B1:200 220-0 exceeding current limit error
@D1:0 220-220
@H1:closed 0-220-220 exceeding current limit error
@P2:conduction 220-220 exceeding current limit error
输入样例3:
在这里给出一组输入。例如:
#T1:[IN P2-2] [P2-1 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]
#T3:[VCC K2-1] [K2-2 M2-IN] [M2-OUT GND]
#K1
#K3
#K2
end
输出样例3:
在这里给出相应的输出。例如:
@K1:closed 220-220 exceeding current limit error
@K2:closed 220-220 exceeding current limit error
@K3:closed 220-220
@B1:200 220-0 exceeding current limit error
@D1:0 220-220
@H1:closed 0-0-220
@P2:cutoff 0-220
输入样例4:
在这里给出一组输入。例如:
#T3:[VCC K2-1] [K2-2 GND]
#K2
end
输出样例4:
在这里给出相应的输出。例如:
short circuit error
输入样例5:
在这里给出一组输入。如果两端电压为0,二极管的导通/截止状态由接入方向决定,1号引脚靠近电源则状态为导通,反之截止。 例如:
#T3:[VCC K2-2] [K2-1 P1-1] [P1-2 K1-2] [K1-1 GND]
end
输出样例5:
在这里给出相应的输出。例如:
@K1:turned on 0-0
@K2:turned on 0-220
@P1:conduction 0-0
输入样例6:
在这里给出一组输入。如果两端电压为0,二极管的导通/截止状态由接入方向决定,1号引脚靠近电源则状态为导通,反之截止。 例如:
#T3:[VCC K2-2] [K2-1 P1-2] [P1-1 K1-2] [K1-1 GND]
end
输出样例6:
####### 。例如:
@K1:turned on 0-0
@K2:turned on 0-220
@P1:cutoff 0-0
类图设计:
class Electric implements Comparable<Electric> {
private String name;
private boolean state;
private double resistance=0;
private double electricity=0;
HashMap<String,String> pin = new HashMap<>();
private double inVolt=0;
private double outVolt=0;
private double PD=inVolt-outVolt;
private double maxElectricity=0;
private String theState;
private double Volt1=0;
private double Volt2=0;
private double Volt3=0;
private boolean inversion;
public Electric() {
}
public boolean isInversion() {
return inversion;
}
public void setInversion(boolean inversion) {
this.inversion = inversion;
}
public double getVolt1() {
return Volt1;
}
public void setVolt1(double volt1) {
Volt1 = volt1;
}
public double getVolt2() {
return Volt2;
}
public void setVolt2(double volt2) {
Volt2 = volt2;
}
public double getVolt3() {
return Volt3;
}
public void setVolt3(double volt3) {
Volt3 = volt3;
}
public String getTheState() {
return theState;
}
public void setTheState(String theState) {
this.theState = theState;
}
public double getMaxElectricity() {
return maxElectricity;
}
public void setMaxElectricity(double maxElectricity) {
this.maxElectricity = maxElectricity;
}
public double getResistance() {
return resistance;
}
public void setResistance(double resistance) {
this.resistance = resistance;
}
public double getElectricity() {
return electricity;
}
public void setElectricity(double electricity) {
this.electricity = electricity;
}
public double getPD() {
return PD;
}
public void setPD(double PD) {
this.PD = PD;
}
public boolean isState() {
return state;
}
public void setState(boolean state) {
this.state = state;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getInVolt() {
return inVolt;
}
public void setInVolt(double inVolt) {
this.inVolt = inVolt;
}
public double getOutVolt() {
return outVolt;
}
public void setOutVolt(double outVolt) {
this.outVolt = outVolt;
}
Electric(String name){
this.name=name;
}
void set(){
}
void set(String state){}
void show(){}
@Override
public int compareTo(Electric o) {
String[] str={"K","F","L","B","R","D","A","H","S","P"};
for(int i=0;i<str.length;i++)
{
if(this.name.startsWith(str[i])){
for(int j=0;j<str.length;j++)
{
if(o.getName().startsWith(str[j])) {
if (i < j)
return -1;
else if (i == j)
return this.name.compareTo(o.getName());
else
return 1;
}
}
}
}
return 0;
}
}
class KSwitch extends Electric{
KSwitch(String name) {
super(name);
this.setMaxElectricity(20);
}
void set(){
super.setOutVolt(super.getInVolt());
}
void set(String a){
if(super.isState()){
super.setState(false);
super.setOutVolt(0);
super.setPD(super.getOutVolt()-super.getInVolt());
}
else{
super.setOutVolt(super.getInVolt());
super.setPD(super.getOutVolt()-super.getInVolt());
super.setState(true);
}
}
void show(){
if(super.isState()) {
if(super.isInversion()){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@" + super.getName() + ":closed"+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt());
else
System.out.println("@" + super.getName() + ":closed"+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt()+" exceeding current limit error");
}
else{
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@" + super.getName() + ":closed"+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt());
else
System.out.println("@" + super.getName() + ":closed"+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt()+" exceeding current limit error");
}
}
else {
if (super.isInversion()) {
if (super.getElectricity() <= super.getMaxElectricity())
System.out.println("@" + super.getName() + ":turned on" + " " + (int) super.getOutVolt() + "-" + (int) super.getInVolt());
else
System.out.println("@" + super.getName() + ":turned on" + " " + (int) super.getOutVolt() + "-" + (int) super.getInVolt() + " exceeding current limit error");
}
else{
if (super.getElectricity() <= super.getMaxElectricity())
System.out.println("@" + super.getName() + ":turned on" + " " + (int) super.getInVolt() + "-" + (int) super.getOutVolt());
else
System.out.println("@" + super.getName() + ":turned on" + " " + (int) super.getInVolt() + "-" + (int) super.getOutVolt() + " exceeding current limit error");
}
}
}
}
class HSwitch extends Electric{
HSwitch(String name){
super(name);
this.setResistance(5);
this.setMaxElectricity(20);
}
void set(){
if(super.getResistance()==5){
super.setResistance(10);
}else if(super.getResistance()==10)
super.setResistance(5);
}
void show(){
if(super.getResistance()==5){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@" + super.getName() + ":closed"+" "+(int)super.getVolt1()+"-"+(int)super.getVolt2()+"-"+(int)super.getVolt3());
else
System.out.println("@" + super.getName() + ":closed"+" "+(int)super.getVolt1()+"-"+(int)super.getVolt2()+"-"+(int)super.getVolt3()+" exceeding current limit error");
}else if(super.getResistance()==10)
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@" + super.getName() + ":turned on"+" "+(int)super.getVolt1()+"-"+(int)super.getVolt2()+"-"+(int)super.getVolt3());
else
System.out.println("@" + super.getName() + ":turned on"+" "+(int)super.getVolt1()+"-"+(int)super.getVolt2()+"-"+(int)super.getVolt3()+" exceeding current limit error");
}
}
class FGovernor extends Electric{
double[] gear= {0,0.3,0.6,0.9};
private int position=0;
FGovernor(String name) {
super(name);
this.setMaxElectricity(18);
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
void set(){
super.setOutVolt(super.getInVolt()*gear[position]);
}
void set(String state){
if(state.equals("+")){
if(position<3)
position++;
super.setPD(gear[position]);
}
else if(state.equals("-")){
if(position>0)
position--;
super.setPD(gear[position]);
}
}
void show(){
if(super.isInversion()){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+position+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt());
else
System.out.println("@"+super.getName()+":"+position+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt()+" exceeding current limit error");
}else{
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+position+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt());
else
System.out.println("@"+super.getName()+":"+position+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt()+" exceeding current limit error");
}
}
}
class LGovernor extends Electric{
private double position;
LGovernor(String name) {
super(name);
this.setMaxElectricity(18);
}
public double getPosition() {
return Double.parseDouble(String.format("%.2f",position));
}
public void setPosition(double position) {
this.position = position;
}
void set(){
super.setOutVolt(super.getInVolt()*position);
}
void set(String state){
position=Double.parseDouble(state);
super.setPD(position);
}
void show(){
if(super.isInversion()){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+String.format("%.2f",position)+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt());
else
System.out.println("@"+super.getName()+":"+String.format("%.2f",position)+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt()+" exceeding current limit error");
}else{
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+String.format("%.2f",position)+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt());
else
System.out.println("@"+super.getName()+":"+String.format("%.2f",position)+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt()+" exceeding current limit error");
}
}
}
class Lamp extends Electric{
private Boolean state;
Lamp(String name) {
super(name);
}
public Boolean getState() {
return state;
}
public void setState(Boolean state) {
this.state = state;
}
}
class Fan extends Electric{
private Boolean state;
Fan(String name) {
super(name);
}
public Boolean getState() {
return state;
}
public void setState(Boolean state) {
this.state = state;
}
}
class SCurtain extends Electric{
private double luminance=0;
private double position=1;
SCurtain(String name) {
super(name);
super.setResistance(15);
super.setMaxElectricity(12);
}
void set(String state){
if(super.getPD()>=50){
luminance=Double.parseDouble(state);
if(luminance<50)
position=1;
else if(luminance<100)
position=0.8;
else if(luminance<200)
position=0.6;
else if(luminance<300)
position=0.4;
else if(luminance<400)
position=0.2;
else
position=0;
}else
position=1;
}
void show() {
if(super.isInversion()){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)(position*100)+"%"+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt());
else
System.out.println("@"+super.getName()+":"+(int)(position*100)+"%"+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt()+" exceeding current limit error");
}else{
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)(position*100)+"%"+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt());
else
System.out.println("@"+super.getName()+":"+(int)(position*100)+"%"+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt()+" exceeding current limit error");
}
}
}
class BLamp extends Lamp{
private double luminance;
BLamp(String name) {
super(name);
super.setResistance(10);
super.setMaxElectricity(9);
}
void set(){
if(super.getPD()<10)
luminance=0;
else if(super.getPD()>=10&&super.getPD()<220)
luminance=50+(super.getPD()-10)*(5.0/7);
else
luminance=200;
}
void show(){
double df1=Math.ceil(luminance)-luminance;
double df2=luminance-Math.floor(luminance);
if(df1<1e-10||df2<1e-10)
luminance=Math.round(luminance);
if(super.isInversion()){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)luminance+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt());
else
System.out.println("@"+super.getName()+":"+(int)luminance+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt()+" exceeding current limit error");
}else{
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)luminance+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt());
else
System.out.println("@"+super.getName()+":"+(int)luminance+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt()+" exceeding current limit error");
}
}
}
class RLamp extends Lamp{
private double luminance;
RLamp(String name) {
super(name);
super.setResistance(5);
super.setMaxElectricity(5);
}
void set(){
if(super.getPD()==0)
luminance=0;
else
luminance=180;
}
void show(){
if(super.isInversion()){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)luminance+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt());
else
System.out.println("@"+super.getName()+":"+(int)luminance+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt()+" exceeding current limit error");
}else{
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)luminance+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt());
else
System.out.println("@"+super.getName()+":"+(int)luminance+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt()+" exceeding current limit error");
}
}
}
class DFan extends Fan{
private double speed;
DFan(String name) {
super(name);
super.setResistance(20);
super.setMaxElectricity(12);
}
void set(){
if(super.getPD()<80)
speed=0;
else if(super.getPD()<=150)
speed=80+(super.getPD()-80)*4;
else
speed=360;
}
void show(){
double df1=Math.ceil(speed)-speed;
double df2=speed-Math.floor(speed);
if(df1<1e-10||df2<1e-10)
speed=Math.round(speed);
if(super.isInversion()){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)speed+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt());
else
System.out.println("@"+super.getName()+":"+(int)speed+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt()+" exceeding current limit error");
}else{
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)speed+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt());
else
System.out.println("@"+super.getName()+":"+(int)speed+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt()+" exceeding current limit error");
}
}
}
class AFan extends Fan{
private double speed;
AFan(String name) {
super(name);
super.setResistance(20);
super.setMaxElectricity(12);
}
void set(){
if(super.getPD()<80)
speed=0;
else if(super.getPD()<=100)
speed=80;
else if(super.getPD()<=120)
speed=160;
else if(super.getPD()<=140)
speed=260;
else
speed=360;
}
void show(){
if(super.isInversion()){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)speed+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt());
else
System.out.println("@"+super.getName()+":"+(int)speed+" "+(int)super.getOutVolt()+"-"+(int)super.getInVolt()+" exceeding current limit error");
}else{
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+(int)speed+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt());
else
System.out.println("@"+super.getName()+":"+(int)speed+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt()+" exceeding current limit error");
}
}
}
class PDiode extends Electric{
public PDiode(String name, String theState) {
super(name);
super.setTheState(theState);
}
void show(){
if(super.getElectricity()<=super.getMaxElectricity())
System.out.println("@"+super.getName()+":"+super.getTheState()+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt());
else
System.out.println("@"+super.getName()+":"+super.getTheState()+" "+(int)super.getInVolt()+"-"+(int)super.getOutVolt()+" exceeding current limit error");
}
}
class ElementLine extends Electric{
LinkedList<Electric> ele = new LinkedList<>();
private boolean shortCircuit;
private boolean pass;
private int cnOfK;
private int cnOfONK;
private double luminance=0;
public boolean isShortCircuit() {
return shortCircuit;
}
public void setShortCircuit(boolean shortCircuit) {
this.shortCircuit = shortCircuit;
}
public boolean isPass() {
return pass;
}
public void setPass(boolean pass) {
this.pass = pass;
}
public int getCnOfK() {
return cnOfK;
}
public void setCnOfK(int cnOfK) {
this.cnOfK = cnOfK;
}
public int getCnOfONK() {
return cnOfONK;
}
public void setCnOfONK(int cnOfONK) {
this.cnOfONK = cnOfONK;
}
public double getLuminance() {
return luminance;
}
public void setLuminance(double luminance) {
this.luminance = luminance;
}
ElementLine() {}
ElementLine(String name) {
super(name);
}
}
class ParallelLine extends Electric{
ArrayList<ElementLine> TLine = new ArrayList<>();
ParallelLine(){}
ParallelLine(String name){super(name);}
}
这是各种类的具体设计
1、电路设备类:描述所有电路设备的公共特征。
2、受控设备类、控制设备类:对应受控、控制设备
3、串联电路类:一条由多个电路设备构成的串联电路,也看成是一个独立的电路设备
4、并联电路类:继承电路设备类,也看成是一个独立的电路设备
String name=str.substring(0,str.indexOf(":"));
ElementLine eleLine=null;
str=str.substring(str.indexOf(":")+1);
String pat = "\\[(.+?)\\]";
Pattern pattern = Pattern.compile(pat);
Matcher m = pattern.matcher(str);
if(name.startsWith("T")) {
boolean mainLine = false;
while (m.find()) {
String[] a = m.group(1).split(" ");
for (int i = 0; i < a.length; i++) {
if (a[i].equals("IN")) {
eleLine = new ElementLine(name);
TLine.add(eleLine);
continue;
} else if (a[i].equals("OUT")) {
continue;
} else if (a[i].equals("VCC")) {
mainLine = true;
elementLine = new ElementLine(name);
continue;
} else if (a[i].equals("GND")) {
continue;
} else {
String[] st = a[i].split("-");
if (st[1].equals("1")) {
Electric elec = null;
boolean anew=false;
if (st[0].startsWith("K")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new KSwitch(st[0]);
anew=true;
}
} else if (st[0].startsWith("F")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new FGovernor(st[0]);
anew=true;
}
} else if (st[0].startsWith("L")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new LGovernor(st[0]);
anew=true;
}
} else if (st[0].startsWith("B")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new BLamp(st[0]);
anew=true;
}
} else if (st[0].startsWith("R")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new RLamp(st[0]);
anew=true;
}
} else if (st[0].startsWith("D")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new DFan(st[0]);
anew=true;
}
} else if (st[0].startsWith("A")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new AFan(st[0]);
anew=true;
}
} else if (st[0].startsWith("H")){
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new HSwitch(st[0]);
anew=true;
}
} else if (st[0].startsWith("S")){
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new SCurtain(st[0]);
anew=true;
}
} else if(st[0].startsWith("P")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
elec=electric.get(j);
break;
}
}
if(j==electric.size()) {
elec = new PDiode(st[0],"conduction");
anew=true;
}
}
if(anew)
electric.add(elec);
if (mainLine) {
elementLine.ele.add(elec);
elementLine.setResistance(elementLine.getResistance() + elec.getResistance());
} else {
eleLine.ele.add(elec);
eleLine.setResistance(eleLine.getResistance() + elec.getResistance());
}
}else if((st[1].equals("2")||st[1].equals("3"))&&st[0].startsWith("H")){
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])){
electric.get(j).pin.put(st[1],name);
break;
}
}
if(j==electric.size()){
Electric elec=new HSwitch(st[0]);
elec.pin.put(st[1],name);
elec.setInversion(true);
electric.add(elec);
}
}else if(st[1].equals("2")&&st[0].startsWith("P")){
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])) {
break;
}
}
if(j==electric.size()) {
electric.add(new PDiode(st[0],"cutoff"));
}
}
else if(st[1].equals("2")){
if (st[0].startsWith("K")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])){
break;
}
}
if(j==electric.size()){
Electric elec=new KSwitch(st[0]);
elec.setInversion(true);
electric.add(elec);
}
} else if (st[0].startsWith("F")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])){
break;
}
}
if(j==electric.size()){
Electric elec=new FGovernor(st[0]);
elec.setInversion(true);
electric.add(elec);
}
} else if (st[0].startsWith("L")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])){
break;
}
}
if(j==electric.size()){
Electric elec=new LGovernor(st[0]);
elec.setInversion(true);
electric.add(elec);
}
} else if (st[0].startsWith("B")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])){
break;
}
}
if(j==electric.size()){
Electric elec=new BLamp(st[0]);
elec.setInversion(true);
electric.add(elec);
}
} else if (st[0].startsWith("R")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])){
break;
}
}
if(j==electric.size()){
Electric elec=new RLamp(st[0]);
elec.setInversion(true);
electric.add(elec);
}
} else if (st[0].startsWith("D")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])){
break;
}
}
if(j==electric.size()){
Electric elec=new DFan(st[0]);
elec.setInversion(true);
electric.add(elec);
}
} else if (st[0].startsWith("A")) {
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])){
break;
}
}
if(j==electric.size()){
Electric elec=new AFan(st[0]);
elec.setInversion(true);
electric.add(elec);
}
} else if (st[0].startsWith("S")){
int j;
for(j=0;j<electric.size();j++){
if(electric.get(j).getName().equals(st[0])){
break;
}
}
if(j==electric.size()){
Electric elec=new SCurtain(st[0]);
elec.setInversion(true);
electric.add(elec);
}
}
}
if (st[1].equals("IN")) {
if(mainLine)
elementLine.ele.add(new Electric(st[0]));
else
eleLine.ele.add(new Electric(st[0]));
}
}
}
}
}
if(name.startsWith("M")){
MLine.add(new ParallelLine(name));
while(m.find())
{
String[] a=m.group(1).split(" ");
for(int i=0;i<a.length;i++)
{
for(int j=0;j<MLine.size();j++)
{
if(name.equals(MLine.get(j).getName())){
for(int x=0;x<TLine.size();x++){
if(TLine.get(x).getName().equals(a[i])){
MLine.get(j).TLine.add(TLine.get(x));
}
}
}
}
}
}
}
}
static void K(String str){
for(int i=0;i<electric.size();i++){
if(electric.get(i).getName().equals(str)){
electric.get(i).set("开关");
}
}
}
static void F(String str){
String name="";
String state="";
if(str.contains("+")){
name=str.substring(0,str.indexOf("+"));
state="+";
}
if(str.contains("-")){
name=str.substring(0,str.indexOf("-"));
state="-";
}
for(int i=0;i<electric.size();i++){
if(electric.get(i).getName().equals(name)){
electric.get(i).set(state);
}
}
}
static void L(String str){
String name=str.substring(0,str.indexOf(":"));
String state=str.substring(str.indexOf(":")+1);
for(int i=0;i<electric.size();i++){
if(electric.get(i).getName().equals(name)){
electric.get(i).set(state);
}
}
}
static void H(String str){
for(int i=0;i<electric.size();i++){
if(electric.get(i).getName().equals(str)){
electric.get(i).set();
}
}
}
处理输入的内容。
for(int i=0;i<elementLine.ele.size();i++){
if(elementLine.ele.get(i).getName().startsWith("M")){
for(int j=0;j<MLine.size();j++){
if(MLine.get(j).getName().equals(elementLine.ele.get(i).getName())){
for(int x=0;x<MLine.get(j).TLine.size();x++){
for(int n=0;n<MLine.get(j).TLine.get(x).ele.size();n++)
{
if(MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("K"))
{
MLine.get(j).TLine.get(x).setCnOfK(MLine.get(j).TLine.get(x).getCnOfK()+1);
if(MLine.get(j).TLine.get(x).ele.get(n).isState())
MLine.get(j).TLine.get(x).setCnOfONK(MLine.get(j).TLine.get(x).getCnOfONK()+1);
}
if(MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("H")){
if(MLine.get(j).TLine.get(x).ele.get(n).getResistance()==5){
if(MLine.get(j).TLine.get(x).ele.get(n).pin.containsKey("2")) {
if (!MLine.get(j).TLine.get(x).ele.get(n).pin.get("2").equals(MLine.get(j).TLine.get(x).getName()))
MLine.get(j).TLine.get(x).setCnOfK(MLine.get(j).TLine.get(x).getCnOfK() + 1);
}else
MLine.get(j).TLine.get(x).setCnOfK(MLine.get(j).TLine.get(x).getCnOfK() + 1);
}
if(MLine.get(j).TLine.get(x).ele.get(n).getResistance()==10){
if(MLine.get(j).TLine.get(x).ele.get(n).pin.containsKey("3")) {
if (MLine.get(j).TLine.get(x).ele.get(n).pin.get("3").equals(MLine.get(j).TLine.get(x).getName())) {
MLine.get(j).TLine.get(x).setResistance(MLine.get(j).TLine.get(x).getResistance() + 5);
} else
MLine.get(j).TLine.get(x).setCnOfK(MLine.get(j).TLine.get(x).getCnOfK() + 1);
}else
MLine.get(j).TLine.get(x).setCnOfK(MLine.get(j).TLine.get(x).getCnOfK() + 1);
}
}
if(MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("P")){
if(MLine.get(j).TLine.get(x).ele.get(n).getTheState().equals("cutoff"))
MLine.get(j).TLine.get(x).setCnOfK(MLine.get(j).TLine.get(x).getCnOfK()+1);
}
if(MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("M"))
{
CalculateTR(MLine.get(j).TLine.get(x).ele.get(n).getName());
MLine.get(j).TLine.get(x).setCnOfK(MLine.get(j).TLine.get(x).getCnOfK()+1);
for(int y=0;y<MLine.size();y++)
{
if(MLine.get(y).getName().equals(MLine.get(j).TLine.get(x).ele.get(n).getName())){
if(MLine.get(y).isState()) {
MLine.get(j).TLine.get(x).setCnOfONK(MLine.get(j).TLine.get(x).getCnOfONK() + 1);
MLine.get(y).setResistance(1/MLine.get(y).getResistance());
MLine.get(j).TLine.get(x).setResistance(MLine.get(j).TLine.get(x).getResistance() + MLine.get(y).getResistance());
}
}
}
}
}
if(MLine.get(j).TLine.get(x).getCnOfK()==MLine.get(j).TLine.get(x).getCnOfONK()) {
MLine.get(j).TLine.get(x).setState(true);
MLine.get(j).setState(true);
MLine.get(j).setResistance(MLine.get(j).getResistance()+1/MLine.get(j).TLine.get(x).getResistance());
}
}
elementLine.setCnOfK(elementLine.getCnOfK()+1);
if(MLine.get(j).isState()) {
elementLine.setCnOfONK(elementLine.getCnOfONK()+1);
MLine.get(j).setResistance(1 / MLine.get(j).getResistance());
elementLine.setResistance(elementLine.getResistance() + MLine.get(j).getResistance());
}
}
}
}
if(elementLine.ele.get(i).getName().startsWith("T")){
for(int j=0;j<TLine.size();j++)
{
if(TLine.get(j).getName().equals(elementLine.ele.get(i).getName())){
for(int n=0;n<TLine.get(j).ele.size();n++){
if(TLine.get(j).ele.get(n).getName().startsWith("K")){
TLine.get(j).setCnOfK(TLine.get(j).getCnOfK()+1);
if(TLine.get(j).ele.get(n).isState())
TLine.get(j).setCnOfONK(TLine.get(j).getCnOfONK()+1);
}
if(TLine.get(j).ele.get(n).getName().startsWith("H")){
if(TLine.get(j).ele.get(n).getResistance()==5){
if(TLine.get(j).ele.get(n).pin.containsKey("2")) {
if (!TLine.get(j).ele.get(n).pin.get("2").equals(TLine.get(j).getName()))
TLine.get(j).setCnOfK(TLine.get(j).getCnOfK() + 1);
}else
TLine.get(j).setCnOfK(TLine.get(j).getCnOfK() + 1);
}
if(TLine.get(j).ele.get(n).getResistance()==10){
if(TLine.get(j).ele.get(n).pin.containsKey("3")) {
if (TLine.get(j).ele.get(n).pin.get("3").equals(TLine.get(j).getName())) {
TLine.get(j).setResistance(TLine.get(j).getResistance() + 5);
} else
TLine.get(j).setCnOfK(TLine.get(j).getCnOfK() + 1);
}else
TLine.get(j).setCnOfK(TLine.get(j).getCnOfK() + 1);
}
}
if(TLine.get(j).ele.get(n).getName().startsWith("P")){
if(TLine.get(j).ele.get(n).getTheState().equals("cutoff"))
TLine.get(j).setCnOfK(TLine.get(j).getCnOfK()+1);
}
if(TLine.get(j).ele.get(n).getName().startsWith("M"))
{
CalculateTR(TLine.get(j).ele.get(n).getName());
TLine.get(j).setCnOfK(TLine.get(j).getCnOfK()+1);
for(int y=0;y<MLine.size();y++)
{
if(MLine.get(y).getName().equals(TLine.get(j).ele.get(n).getName())){
if(MLine.get(y).isState()) {
TLine.get(j).setCnOfONK(TLine.get(j).getCnOfONK() + 1);
MLine.get(y).setResistance(1/MLine.get(y).getResistance());
TLine.get(j).setResistance(TLine.get(j).getResistance() + MLine.get(y).getResistance());
}
}
}
}
}
if(TLine.get(j).getCnOfK()==TLine.get(j).getCnOfONK()){
TLine.get(j).setState(true);
}
elementLine.setCnOfK(elementLine.getCnOfK()+1);
if(TLine.get(j).isState()){
elementLine.setCnOfONK(elementLine.getCnOfONK()+1);
elementLine.setResistance(elementLine.getResistance() + TLine.get(j).getResistance());
}
}
}
}
if(elementLine.ele.get(i).getName().startsWith("K")){
elementLine.setCnOfK(elementLine.getCnOfK()+1);
if(elementLine.ele.get(i).isState()){
elementLine.setCnOfONK(elementLine.getCnOfONK()+1);
}
}
if(elementLine.ele.get(i).getName().startsWith("H")){
if(elementLine.ele.get(i).getResistance()==5){
if(elementLine.ele.get(i).pin.containsKey("2")) {
if (!elementLine.ele.get(i).pin.get("2").equals(elementLine.getName())) {
elementLine.setCnOfK(elementLine.getCnOfK() + 1);
}
}else
elementLine.setCnOfK(elementLine.getCnOfK() + 1);
}
if(elementLine.ele.get(i).getResistance()==10){
if(elementLine.ele.get(i).pin.containsKey("3")) {
if (elementLine.ele.get(i).pin.get("3").equals(elementLine.getName())) {
elementLine.setResistance(elementLine.getResistance() + 5);
} else {
elementLine.setCnOfK(elementLine.getCnOfK() + 1);
}
}else
elementLine.setCnOfK(elementLine.getCnOfK() + 1);
}
}
}
for (int i = 0; i < elementLine.ele.size(); i++) {
if ( elementLine.ele.get(i).getName().startsWith("F") || elementLine.ele.get(i).getName().startsWith("L") ) {
elementLine.ele.get(i).setElectricity(elementLine.getElectricity());
} else if(elementLine.ele.get(i).getName().startsWith("K") ){
elementLine.ele.get(i).setInVolt(V);
V-=elementLine.ele.get(i).getResistance()*elementLine.getElectricity();
elementLine.ele.get(i).setOutVolt(V);
elementLine.ele.get(i).setElectricity(elementLine.getElectricity());
}else if( elementLine.ele.get(i).getName().startsWith("H")){
elementLine.ele.get(i).setElectricity(elementLine.getElectricity());
if(elementLine.ele.get(i).isInversion()){
if(elementLine.ele.get(i).getResistance()==5) {
elementLine.ele.get(i).setVolt2(V);
V-=elementLine.ele.get(i).getResistance()*elementLine.getElectricity();
elementLine.ele.get(i).setVolt1(V);
}else{
elementLine.ele.get(i).setVolt3(V);
V-=elementLine.ele.get(i).getResistance()*elementLine.getElectricity();
elementLine.ele.get(i).setVolt1(V);
}
}else{
if(elementLine.ele.get(i).getResistance()==5) {
elementLine.ele.get(i).setVolt1(V);
V-=elementLine.ele.get(i).getResistance()*elementLine.getElectricity();
elementLine.ele.get(i).setVolt2(V);
}else{
elementLine.ele.get(i).setVolt1(V);
V-=elementLine.ele.get(i).getResistance()*elementLine.getElectricity();
elementLine.ele.get(i).setVolt3(V);
}
}
}else if (elementLine.ele.get(i).getName().startsWith("M")) {
for (int j = 0; j < MLine.size(); j++) {
if (MLine.get(j).getName().equals(elementLine.ele.get(i).getName())) {
MLine.get(j).setPD(elementLine.getElectricity() * MLine.get(j).getResistance());
for (int x = 0; x < MLine.get(j).TLine.size(); x++) {
if (MLine.get(j).TLine.get(x).isState()) {
double volt=V;
MLine.get(j).TLine.get(x).setElectricity(MLine.get(j).getPD() / MLine.get(j).TLine.get(x).getResistance());
for (int n = 0; n < MLine.get(j).TLine.get(x).ele.size(); n++) {
if (MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("H")) {
MLine.get(j).TLine.get(x).ele.get(n).setElectricity(MLine.get(j).TLine.get(x).getElectricity());
if(MLine.get(j).TLine.get(x).ele.get(n).isInversion()){
if(MLine.get(j).TLine.get(x).ele.get(n).getResistance()==5) {
MLine.get(j).TLine.get(x).ele.get(n).setVolt2(volt);
volt-=MLine.get(j).TLine.get(x).getElectricity() * MLine.get(j).TLine.get(x).ele.get(n).getResistance();
MLine.get(j).TLine.get(x).ele.get(n).setVolt1(volt);
}else{
MLine.get(j).TLine.get(x).ele.get(n).setVolt3(volt);
volt-=MLine.get(j).TLine.get(x).getElectricity() * MLine.get(j).TLine.get(x).ele.get(n).getResistance();
MLine.get(j).TLine.get(x).ele.get(n).setVolt1(volt);
}
}else{
if(MLine.get(j).TLine.get(x).ele.get(n).getResistance()==5) {
MLine.get(j).TLine.get(x).ele.get(n).setVolt1(volt);
volt-=MLine.get(j).TLine.get(x).getElectricity() * MLine.get(j).TLine.get(x).ele.get(n).getResistance();
MLine.get(j).TLine.get(x).ele.get(n).setVolt2(volt);
}else{
MLine.get(j).TLine.get(x).ele.get(n).setVolt1(volt);
volt-=MLine.get(j).TLine.get(x).getElectricity() * MLine.get(j).TLine.get(x).ele.get(n).getResistance();
MLine.get(j).TLine.get(x).ele.get(n).setVolt3(volt);
}
}
continue;
}else if(MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("M")){
CalculateV(MLine.get(j).TLine.get(x).ele.get(n).getName(),MLine.get(j).TLine.get(x).getElectricity(),volt);
for(int y=0;y<MLine.size();y++){
if(MLine.get(y).getName().equals(MLine.get(j).TLine.get(x).ele.get(n).getName())){
volt-=MLine.get(y).getPD();
}
}
}else {
MLine.get(j).TLine.get(x).ele.get(n).setInVolt(volt);
MLine.get(j).TLine.get(x).ele.get(n).setPD(MLine.get(j).TLine.get(x).getElectricity() * MLine.get(j).TLine.get(x).ele.get(n).getResistance());
volt -= MLine.get(j).TLine.get(x).ele.get(n).getPD();
MLine.get(j).TLine.get(x).ele.get(n).setOutVolt(volt);
MLine.get(j).TLine.get(x).ele.get(n).set();
MLine.get(j).TLine.get(x).ele.get(n).setElectricity(MLine.get(j).TLine.get(x).getElectricity());
}
if (MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("R")) {
if (MLine.get(j).TLine.get(x).ele.get(n).getPD() != 0)
elementLine.setLuminance(elementLine.getLuminance() + 180);
}
if (MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("B")) {
if (MLine.get(j).TLine.get(x).ele.get(n).getPD() < 10)
elementLine.setLuminance(elementLine.getLuminance() + 0);
else if (MLine.get(j).TLine.get(x).ele.get(n).getPD() >= 10 && MLine.get(j).TLine.get(x).ele.get(n).getPD() < 220)
elementLine.setLuminance(elementLine.getLuminance() + 50 + (MLine.get(j).TLine.get(x).ele.get(n).getPD() - 10) * (5.0 / 7));
else
elementLine.setLuminance(elementLine.getLuminance() + 200);
}
}
}else{
for (int n = 0; n < MLine.get(j).TLine.get(x).ele.size(); n++){
if(MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("K")){
MLine.get(j).TLine.get(x).ele.get(n).setInVolt(V);
if(MLine.get(j).TLine.get(x).ele.get(n).isState())
MLine.get(j).TLine.get(x).ele.get(n).setOutVolt(V);
else
break;
}else if(MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("P")) {
if(MLine.get(j).TLine.get(x).ele.get(n).getTheState().equals("conduction"))
MLine.get(j).TLine.get(x).ele.get(n).setInVolt(V);
else {
MLine.get(j).TLine.get(x).ele.get(n).setOutVolt(V);
break;
}
}else if(MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("H")){
if(MLine.get(j).TLine.get(x).ele.get(n).pin.containsKey("2")) {
if(MLine.get(j).TLine.get(x).ele.get(n).pin.get("2").equals(MLine.get(j).TLine.get(x).getName())){
if(MLine.get(j).TLine.get(x).ele.get(n).isInversion()){
MLine.get(j).TLine.get(x).ele.get(n).setVolt2(V);
if(MLine.get(j).TLine.get(x).ele.get(n).getResistance()==5){
MLine.get(j).TLine.get(x).ele.get(n).setVolt1(V);
}else
break;
}else{
MLine.get(j).TLine.get(x).ele.get(n).setVolt1(V);
if(MLine.get(j).TLine.get(x).ele.get(n).getResistance()==5){
MLine.get(j).TLine.get(x).ele.get(n).setVolt2(V);
}else
break;
}
}
}
if(MLine.get(j).TLine.get(x).ele.get(n).pin.containsKey("3")) {
if(MLine.get(j).TLine.get(x).ele.get(n).pin.get("3").equals(MLine.get(j).TLine.get(x).getName())){
if(MLine.get(j).TLine.get(x).ele.get(n).isInversion()){
MLine.get(j).TLine.get(x).ele.get(n).setVolt3(V);
if(MLine.get(j).TLine.get(x).ele.get(n).getResistance()==15){
MLine.get(j).TLine.get(x).ele.get(n).setVolt1(V);
}else
break;
}else{
MLine.get(j).TLine.get(x).ele.get(n).setVolt1(V);
if(MLine.get(j).TLine.get(x).ele.get(n).getResistance()==15){
MLine.get(j).TLine.get(x).ele.get(n).setVolt3(V);
}else
break;
}
}
}
}
else if(MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("M")){
setV(MLine.get(j).TLine.get(x).ele.get(n).getName(),V);
}
else {
MLine.get(j).TLine.get(x).ele.get(n).setInVolt(V);
MLine.get(j).TLine.get(x).ele.get(n).setOutVolt(V);
}
}
}
}
V-=MLine.get(j).getPD();
}
}
} else if (elementLine.ele.get(i).getName().startsWith("T")) {
for (int j = 0; j < TLine.size(); j++) {
if (TLine.get(j).getName().equals(elementLine.ele.get(i).getName())) {
if (TLine.get(j).isState()) {
double volt=V;
for (int n = 0; n < TLine.get(j).ele.size(); n++) {
if (TLine.get(j).ele.get(n).getName().startsWith("H")) {
TLine.get(j).ele.get(n).setElectricity(elementLine.getElectricity());
if(TLine.get(j).ele.get(n).isInversion()){
if(TLine.get(j).ele.get(n).getResistance()==5) {
TLine.get(j).ele.get(n).setVolt2(volt);
volt-=elementLine.getElectricity() * TLine.get(j).ele.get(n).getResistance();
TLine.get(j).ele.get(n).setVolt1(volt);
}else{
TLine.get(j).ele.get(n).setVolt3(volt);
volt-=elementLine.getElectricity() * TLine.get(j).ele.get(n).getResistance();
TLine.get(j).ele.get(n).setVolt1(volt);
}
}else{
if(TLine.get(j).ele.get(n).getResistance()==5) {
TLine.get(j).ele.get(n).setVolt1(volt);
volt-=elementLine.getElectricity() * TLine.get(j).ele.get(n).getResistance();
TLine.get(j).ele.get(n).setVolt2(volt);
}else{
TLine.get(j).ele.get(n).setVolt1(volt);
volt-=elementLine.getElectricity() * TLine.get(j).ele.get(n).getResistance();
TLine.get(j).ele.get(n).setVolt3(volt);
}
}
continue;
}else if(TLine.get(j).ele.get(n).getName().startsWith("M")) {
CalculateV(TLine.get(j).ele.get(n).getName(),elementLine.getElectricity(),volt);
for(int y=0;y<MLine.size();y++){
if(MLine.get(y).getName().equals(TLine.get(j).ele.get(n).getName())){
volt-=MLine.get(y).getPD();
}
}
}else{
TLine.get(j).ele.get(n).setInVolt(volt);
TLine.get(j).ele.get(n).setPD(elementLine.getElectricity() * TLine.get(j).ele.get(n).getResistance());
volt-=TLine.get(j).ele.get(n).getPD();
TLine.get(j).ele.get(n).setOutVolt(volt);
TLine.get(j).ele.get(n).set();
TLine.get(j).ele.get(n).setElectricity(elementLine.getElectricity());
}
if (TLine.get(j).ele.get(n).getName().startsWith("R")) {
if (TLine.get(j).ele.get(n).getPD() != 0)
elementLine.setLuminance(elementLine.getLuminance() + 180);
}
if (TLine.get(j).ele.get(n).getName().startsWith("B")) {
if (TLine.get(j).ele.get(n).getPD() < 10)
elementLine.setLuminance(elementLine.getLuminance() + 0);
else if (TLine.get(j).ele.get(n).getPD() >= 10 && TLine.get(j).ele.get(n).getPD() < 220)
elementLine.setLuminance(elementLine.getLuminance() + 50 + (TLine.get(j).ele.get(n).getPD() - 10) * (5.0 / 7));
else
elementLine.setLuminance(elementLine.getLuminance() + 200);
}
}
V-=elementLine.getElectricity()*TLine.get(j).getResistance();
}else{
for (int n = 0; n < TLine.get(j).ele.size(); n++){
if(TLine.get(j).ele.get(n).getName().startsWith("K")){
TLine.get(j).ele.get(n).setInVolt(V);
if(TLine.get(j).ele.get(n).isState())
TLine.get(j).ele.get(n).setOutVolt(V);
else
break;
}else if(TLine.get(j).ele.get(n).getName().startsWith("P"))
{
if(TLine.get(j).ele.get(n).getTheState().equals("conduction")) {
TLine.get(j).ele.get(n).setInVolt(V);
TLine.get(j).ele.get(n).setOutVolt(V);
}
else {
TLine.get(j).ele.get(n).setOutVolt(V);
break;
}
}else if(TLine.get(j).ele.get(n).getName().startsWith("H")){
if(TLine.get(j).ele.get(n).pin.containsKey("2")) {
if(TLine.get(j).ele.get(n).pin.get("2").equals(TLine.get(j).getName())){
if(TLine.get(j).ele.get(n).isInversion()){
TLine.get(j).ele.get(n).setVolt2(V);
if(TLine.get(j).ele.get(n).getResistance()==5){
TLine.get(j).ele.get(n).setVolt1(V);
}else
break;
}else{
TLine.get(j).ele.get(n).setVolt1(V);
if(TLine.get(j).ele.get(n).getResistance()==5){
TLine.get(j).ele.get(n).setVolt2(V);
}else
break;
}
}
}
if(TLine.get(j).ele.get(n).pin.containsKey("3")) {
if(TLine.get(j).ele.get(n).pin.get("3").equals(TLine.get(j).getName())){
if(TLine.get(j).ele.get(n).isInversion()){
TLine.get(j).ele.get(n).setVolt3(V);
if(TLine.get(j).ele.get(n).getResistance()==15){
TLine.get(j).ele.get(n).setVolt1(V);
}else
break;
}else{
TLine.get(j).ele.get(n).setVolt1(V);
if(TLine.get(j).ele.get(n).getResistance()==15){
TLine.get(j).ele.get(n).setVolt3(V);
}else
break;
}
}
}
}else if(TLine.get(j).ele.get(n).getName().startsWith("M"))
{
setV(TLine.get(j).ele.get(n).getName(),V);
}
else {
TLine.get(j).ele.get(n).setInVolt(V);
TLine.get(j).ele.get(n).setOutVolt(V);
}
}
}
}
}
} else {
elementLine.ele.get(i).setInVolt(V);
elementLine.ele.get(i).setPD(elementLine.getElectricity() * elementLine.ele.get(i).getResistance());
V-=elementLine.ele.get(i).getPD();
elementLine.ele.get(i).setOutVolt(V);
elementLine.ele.get(i).setElectricity(elementLine.getElectricity());
elementLine.ele.get(i).set();
if (elementLine.ele.get(i).getName().startsWith("R")) {
if (elementLine.ele.get(i).getPD() != 0)
elementLine.setLuminance(elementLine.getLuminance() + 180);
}
if (elementLine.ele.get(i).getName().startsWith("B")) {
if (elementLine.ele.get(i).getPD() < 10)
elementLine.setLuminance(elementLine.getLuminance() + 0);
else if (elementLine.ele.get(i).getPD() >= 10 && elementLine.ele.get(i).getPD() < 220)
elementLine.setLuminance(elementLine.getLuminance() + 50 + (elementLine.ele.get(i).getPD() - 10) * (5.0 / 7));
else
elementLine.setLuminance(elementLine.getLuminance() + 200);
}
}
}
for (int i = 0; i < elementLine.ele.size(); i++) {
if (elementLine.ele.get(i).getName().startsWith("S") && elementLine.isState()) {
elementLine.ele.get(i).set(String.valueOf(elementLine.getLuminance()));
}
if (elementLine.ele.get(i).getName().startsWith("M")) {
for (int j = 0; j < MLine.size(); j++) {
if (MLine.get(j).getName().equals(elementLine.ele.get(i).getName())) {
for (int x = 0; x < MLine.get(j).TLine.size(); x++) {
if (MLine.get(j).TLine.get(x).isState()) {
for (int n = 0; n < MLine.get(j).TLine.get(x).ele.size(); n++) {
if (MLine.get(j).TLine.get(x).ele.get(n).getName().startsWith("S") && MLine.get(j).TLine.get(x).isState()) {
MLine.get(j).TLine.get(x).ele.get(n).set(String.valueOf(elementLine.getLuminance()));
}
}
}
}
}
}
}
if (elementLine.ele.get(i).getName().startsWith("T")) {
for (int j = 0; j < TLine.size(); j++) {
if (TLine.get(j).getName().equals(elementLine.ele.get(i).getName())) {
if (TLine.get(j).isState()) {
for (int n = 0; n < TLine.get(j).ele.size(); n++) {
if (TLine.get(j).ele.get(n).getName().startsWith("S") && TLine.get(j).isState()) {
TLine.get(j).ele.get(n).set(String.valueOf(elementLine.getLuminance()));
}
}
}
}
}
}
}
标签:总结,MLine,题目,get,引脚,PTA,TLine,ele,elementLine
From: https://www.cnblogs.com/theBlogForStudy/p/18276909