题目集7~8的总结性Blog
一、前言
1.第七次是在第六次的基础上加上了互斥开关,受控窗帘两个设备,以及串联电路里面套串联电路,而且没有给出测试点的提示,难度较大,知识点方面与上一次的类似。
2.第八次是在第七次的基础上的迭代,加上了二极管这个设备,以及输出方面的输出引脚电压,以及电流是否超限,并联套并联,难度巨大,知识点同上。
二、设计与分析
1.家居强电电路模拟程序-3
1.1 从类图可以看出在上次的基础上加上了MutexSwitche(互斥开关)类继承开关类,Controlledcurtain(受控窗帘)类继承自受控设备类。
1.2 Main类原代码如下
public class Main {
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static int index = -1;// 找到主串联电路
public static void main(String[] args) {
ArrayList<String> command = new ArrayList<>();
ArrayList<String> commandid = new ArrayList<>();
Scanner sc = new Scanner(System.in);
String dl[] = new String[100];
Pattern p4 = Pattern.compile("#((K|F|L|H)\\d+)([^\\[\\]])*");
Pattern p5 = Pattern.compile("#L\\d+:(\\d+.?\\d*)");
Pattern p6 = Pattern.compile("#(K\\d+)");
Pattern p13 = Pattern.compile("#(H\\d+)");
Pattern p7 = Pattern.compile("#(F\\d+)\\+");
Pattern p8 = Pattern.compile("#(F\\d+)-");
Pattern p9 = Pattern.compile("#(T\\d+):\\[.*\\]");
Pattern p10 = Pattern.compile("#M(\\d+):\\[.*\\]");
Pattern p11 = Pattern.compile("#(M\\d+):\\[(T\\d+)");
Pattern p12 = Pattern.compile("\\[*(T\\d+)\\]*");
for (int i = 0;; i++) {
dl[i] = sc.nextLine();
if (dl[i].equals("end"))
break;
Matcher m12 = p9.matcher(dl[i]);
Matcher m13 = p10.matcher(dl[i]);
Matcher m4 = p4.matcher(dl[i]);
if (m12.find()) {
Seriescircuit seriescircuit = new Seriescircuit(m12.group(1), 0);
Pattern pattern = Pattern.compile("\\[([^\\[\\]])*\\]");
Matcher matcher = pattern.matcher(dl[i]);
ArrayList<String> matches = new ArrayList<>();
while (matcher.find()) {
String match = matcher.group(0);
matches.add(match);
}
for (int j = 0; j < matches.size(); j++) {
adddevice(seriescircuit, matches.get(j));
}
seriescircuits.add(seriescircuit);
}
if (m13.find()) {
String s[] = dl[i].split(" ");
Parallelcircuit parallelcircuit = null;
for (int j = 0; j < s.length; j++) {
Matcher m1 = p11.matcher(s[j]);
Matcher m2 = p12.matcher(s[j]);
if (m1.find()) {
parallelcircuit = new Parallelcircuit(m1.group(1), 0);
for (int l = 0; l < seriescircuits.size(); l++) {
if (seriescircuits.get(l).getId().equals(m1.group(2))) {
parallelcircuit.addseriescircuits(seriescircuits.get(l));
}
}
} else if (m2.find()) {
for (int l = 0; l < seriescircuits.size(); l++) {
if (seriescircuits.get(l).getId().equals(m2.group(1))) {
parallelcircuit.addseriescircuits(seriescircuits.get(l));
}
}
} else {
}
}
parallelcircuit.calculateallresistance();
parallelcircuits.add(parallelcircuit);
}
if (m4.find()) {
command.add(m4.group(0));
commandid.add(m4.group(1));
}
}
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getIsMain() == 1) {
index = i;
break;
}
}
int index1 = -1;// 找到主电路控制设备命令
int index3 = -1;// 判断主电路是否有开关
for (int k = 0; k < command.size(); k++) {
if (seriescircuits.get(index).getDevices().get(0) instanceof Controlleddevices) {
for (int j = 1; j < seriescircuits.get(index).getDevices().size(); j++) {
if (commandid.get(k).equals(seriescircuits.get(index).getDevices().get(j).getId())) {
Matcher m11 = p6.matcher(command.get(k));
Matcher m12 = p13.matcher(command.get(k));
if (m11.find()) {
if (seriescircuits.get(index).getDevices().get(j).getId().equals(m11.group(1))) {
index3 = 1;
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 0)
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(1);
else
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(0);
seriescircuits.get(index).getDevices().get(j).calculateOutputV();
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 1)
seriescircuits.get(index).setIsaccess(1);
else
seriescircuits.get(index).setIsaccess(0);
}
}
if (m12.find()) {
if (seriescircuits.get(index).getDevices().get(j).getId().equals(m12.group(1))) {
index3 = 1;
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 0)
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(1);
else
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(0);
seriescircuits.get(index).getDevices().get(j).calculateOutputV();
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 1)
seriescircuits.get(index).setIsaccess(1);
else
seriescircuits.get(index).setIsaccess(0);
}
}
}
}
} else {
for (int m = 0; m < seriescircuits.get(index).getDevices().size(); m++) {
if (commandid.get(k).equals(seriescircuits.get(index).getDevices().get(m).getId())) {
index1 = k;
Matcher m5 = p5.matcher(command.get(k));
Matcher m6 = p6.matcher(command.get(k));
Matcher m20 = p13.matcher(command.get(k));
Matcher m7 = p7.matcher(command.get(k));
Matcher m8 = p8.matcher(command.get(k));
if (m5.find()) {
((ContinuousGovernor) (seriescircuits.get(index).getDevices().get(0)))
.setGearparameter(Double.parseDouble(m5.group(1)));
seriescircuits.get(index).getDevices().get(0).calculateOutputV();
}
if (m6.find()) {
for (int j = 0; j < seriescircuits.get(index).getDevices().size(); j++) {
if (seriescircuits.get(index).getDevices().get(j).getId().equals(m6.group(1))) {
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 0)
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(1);
else
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(0);
seriescircuits.get(index).getDevices().get(j).calculateOutputV();
}
}
}
if (m20.find()) {
for (int j = 0; j < seriescircuits.get(index).getDevices().size(); j++) {
if (seriescircuits.get(index).getDevices().get(j).getId().equals(m20.group(1))) {
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 0)
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(1);
else
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(0);
seriescircuits.get(index).getDevices().get(j).calculateOutputV();
}
}
}
if (m7.find() || m8.find()) {
Matcher m9 = p7.matcher(command.get(k));
Matcher m10 = p8.matcher(command.get(k));
if (m9.find()) {
if (((BinningGovernor) (seriescircuits.get(index).getDevices().get(0))).getId()
.equals(m9.group(1)))
((BinningGovernor) (seriescircuits.get(index).getDevices().get(0))).addGear();
}
if (m10.find()) {
if (((BinningGovernor) (seriescircuits.get(index).getDevices().get(0))).getId()
.equals(m10.group(1)))
((BinningGovernor) (seriescircuits.get(index).getDevices().get(0))).subtractGear();
}
seriescircuits.get(index).getDevices().get(0).calculateOutputV();
}
if (seriescircuits.get(index).getDevices().get(m).getOutputV() != 0) {
seriescircuits.get(index).setIsaccess(1);
} else
seriescircuits.get(index).setIsaccess(0);
}
}
}
}
if (seriescircuits.get(index).getDevices().get(0) instanceof Controlleddevices) {
seriescircuits.get(index).getDevices().get(0)
.setOutputV(seriescircuits.get(index).getDevices().get(0).getInputV());
if (index3 != 1)
seriescircuits.get(index).setIsaccess(1);
}
for (int k = 0; k < command.size(); k++) {
if (k != index1) {
Matcher m11 = p6.matcher(command.get(k));
Matcher m12 = p13.matcher(command.get(k));
if (m11.find()) {
if (parallelcircuits.size() != 0) {
for (int i = 0; i < parallelcircuits.size(); i++) {
for (int p = 0; p < parallelcircuits.get(i).getSeriescircuits().size(); p++) {
setSwitchstate(parallelcircuits.get(i).getSeriescircuits().get(p), m11);
}
}
}
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
setSwitchstate(((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))), m11);
}
}
}
if (m12.find()) {
if (parallelcircuits.size() != 0) {
for (int i = 0; i < parallelcircuits.size(); i++) {
for (int p = 0; p < parallelcircuits.get(i).getSeriescircuits().size(); p++) {
setSwitchstate(parallelcircuits.get(i).getSeriescircuits().get(p), m12);
}
}
}
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
setSwitchstate(((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))), m12);
}
}
}
}
}
seriescircuits.get(index).getDevices().get(0).calculateOutputV();
int index2 = 0;// 用于判断串联电路是否含有控制设备
int index4 = 0;
int isaccess = 0;
double r = 0;
int index5 = -1;
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Switch) {
if (((Switch) (seriescircuits.get(index).getDevices().get(i))).getState() == 0)
index5 = 1;
}
}
if (index5 == 1)
seriescircuits.get(index).setIsaccess(0);
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
index4 = 0;
setSeriescircuitIsaccess(((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))));
}
}
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Parallelcircuit) {
for (int p = 0; p < ((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().size(); p++) {
setSeriescircuitIsaccess(((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().get(p));
((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i))).calculateallresistance();
}
}
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))).calculateallresistance();
}
}
seriescircuits.get(index).calculateallresistance();
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
r = ((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))).getAllresistance()
/ seriescircuits.get(index).getAllresistance();
if (index5 == -1) {
if (setaccess(((Seriescircuit) (seriescircuits.get(index).getDevices().get(i)))) == 0) {
seriescircuits.get(index).setIsaccess(1);
setshow(((Device) (seriescircuits.get(index).getDevices().get(0))),
((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))), r);
} else {
seriescircuits.get(index).setIsaccess(0);
break;
}
} else {
seriescircuits.get(index).setIsaccess(0);
break;
}
}
if (seriescircuits.get(index).getDevices().get(i) instanceof Parallelcircuit) {
seriescircuits.get(index).calculateallresistance();
if (index5 == 1) {
seriescircuits.get(index).setIsaccess(0);
}
r = ((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i))).getAllresistance()
/ seriescircuits.get(index).getAllresistance();
for (int k = 0; k < ((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().size(); k++) {
if (index5 == -1) {
if (setaccess(((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().get(k)) == 0) {
seriescircuits.get(index).setIsaccess(1);
setshow(((Device) (seriescircuits.get(index).getDevices().get(0))),
((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().get(k),
r);
}
} else {
seriescircuits.get(index).setIsaccess(0);
break;
}
}
}
}
if (parallelcircuits.size() == 0) {
seriescircuits.get(index).calculateallresistance();
}
if (seriescircuits.get(index).getIsaccess() == 1)
isaccess = 1;
else
isaccess = 0;
seriescircuits.get(index).getDevices().get(0).calculateOutputV();
double v = seriescircuits.get(index).getDevices().get(0).getOutputV();
if (isaccess == 1) {
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Controlleddevices) {
r = seriescircuits.get(index).getDevices().get(i).resistance
/ seriescircuits.get(index).getAllresistance();
seriescircuits.get(index).getDevices().get(i).setOutputV(v * r);
seriescircuits.get(index).getDevices().get(i).calculateshow();
}
}
} else {
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Controlleddevices) {
seriescircuits.get(index).getDevices().get(i).setOutputV(0);
seriescircuits.get(index).getDevices().get(i).calculateshow();
}
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
setshow((Seriescircuit) (seriescircuits.get(index).getDevices().get(i)));
}
}
}
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Parallelcircuit) {
for (int j = 0; j < ((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().size(); j++) {
seriescircuitschoose(((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().get(j));
}
} else if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
seriescircuitschoose(((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))));
} else {
if (seriescircuits.get(index).getDevices().get(i) instanceof MutexSwitche)
mutexSwitches.add((MutexSwitche) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof Switch)
switchs.add((Switch) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof BinningGovernor)
binningGovernors.add((BinningGovernor) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof ContinuousGovernor)
continuousGovernors.add((ContinuousGovernor) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof Incandescent)
incandescents.add((Incandescent) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof fluorescent)
fluorescents.add((fluorescent) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof Ceilinfan)
ceilinfans.add((Ceilinfan) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof Controlledcurtain)
controlledcurtains.add((Controlledcurtain) (seriescircuits.get(index).getDevices().get(i)));
else
floorFans.add((FloorFan) (seriescircuits.get(index).getDevices().get(i)));
}
}
Collections.sort(switchs);
Collections.sort(binningGovernors);
Collections.sort(continuousGovernors);
Collections.sort(incandescents);
Collections.sort(fluorescents);
Collections.sort(ceilinfans);
Collections.sort(floorFans);
Collections.sort(mutexSwitches);
Collections.sort(controlledcurtains);
double bright = 0;
for (int i = 0; i < switchs.size(); i++) {
switchs.get(i).show();
}
for (int i = 0; i < binningGovernors.size(); i++) {
binningGovernors.get(i).show();
}
for (int i = 0; i < continuousGovernors.size(); i++) {
continuousGovernors.get(i).show();
}
for (int i = 0; i < incandescents.size(); i++) {
incandescents.get(i).show();
bright += incandescents.get(i).getBrightness();
}
for (int i = 0; i < fluorescents.size(); i++) {
fluorescents.get(i).show();
bright += fluorescents.get(i).getBrightness();
}
for (int i = 0; i < ceilinfans.size(); i++) {
ceilinfans.get(i).show();
}
for (int i = 0; i < floorFans.size(); i++) {
floorFans.get(i).show();
}
int flag = 0;
String s = null;
for (int i = 0; i < mutexSwitches.size(); i++) {
flag = 0;
if (i >= 1) {
if (s.equals(mutexSwitches.get(i).id) == false) {
if (mutexSwitches.get(i).getOutputPin() == 3) {
for (int j = 0; j < mutexSwitches.size(); j++) {
if (j != i && mutexSwitches.get(j).id.equals(mutexSwitches.get(i).id)) {
mutexSwitches.get(j).show();
s = mutexSwitches.get(j).id;
flag = 1;
}
}
if (flag == 0) {
s = mutexSwitches.get(i).id;
if (mutexSwitches.get(i).getState() == 1) {
System.out.println("@" + mutexSwitches.get(i).id + ":turned on");
} else
System.out.println("@" + mutexSwitches.get(i).id + ":closed");
}
} else if (mutexSwitches.get(i).getOutputPin() == 2) {
for (int j = 0; j < mutexSwitches.size(); j++) {
if (j != i && mutexSwitches.get(j).id.equals(mutexSwitches.get(i).id)) {
mutexSwitches.get(i).show();
s = mutexSwitches.get(i).id;
flag = 1;
}
}
if (flag == 0) {
s = mutexSwitches.get(i).id;
if (mutexSwitches.get(i).getState() == 0) {
System.out.println("@" + mutexSwitches.get(i).id + ":turned on");
} else
System.out.println("@" + mutexSwitches.get(i).id + ":closed");
}
}
}
} else {
if (mutexSwitches.get(i).getOutputPin() == 3) {
for (int j = 0; j < mutexSwitches.size(); j++) {
if (j != i && mutexSwitches.get(j).id.equals(mutexSwitches.get(i).id)) {
mutexSwitches.get(j).show();
s = mutexSwitches.get(j).id;
flag = 1;
}
}
if (flag == 0) {
s = mutexSwitches.get(i).id;
if (mutexSwitches.get(i).getState() == 1) {
System.out.println("@" + mutexSwitches.get(i).id + ":turned on");
} else
System.out.println("@" + mutexSwitches.get(i).id + ":closed");
}
} else if (mutexSwitches.get(i).getOutputPin() == 2) {
for (int j = 0; j < mutexSwitches.size(); j++) {
if (j != i && mutexSwitches.get(j).id.equals(mutexSwitches.get(i).id)) {
mutexSwitches.get(i).show();
s = mutexSwitches.get(i).id;
flag = 1;
}
}
if (flag == 0) {
s = mutexSwitches.get(i).id;
if (mutexSwitches.get(i).getState() == 0) {
System.out.println("@" + mutexSwitches.get(i).id + ":turned on");
} else
System.out.println("@" + mutexSwitches.get(i).id + ":closed");
}
}
}
}
for (int i = 0; i < controlledcurtains.size(); i++) {
controlledcurtains.get(i).setBrightness(bright);
controlledcurtains.get(i).calculateshow();
controlledcurtains.get(i).show();
}
}
static void adddevice(Seriescircuit seriescircuit, String str) {
Pattern p1 = Pattern.compile("VCC\\s(.\\d+)-(\\d+)");
Pattern p4 = Pattern.compile("VCC\\s(M\\d+)-IN");
Pattern p2 = Pattern.compile("(.\\d+)-(\\d+)\\s(.\\d+)-(\\d+)");
Pattern p11 = Pattern.compile("IN\\s(.\\d+)-(\\d+)");
Pattern p12 = Pattern.compile("(M|T)\\d+-OUT\\s(.\\d+)-(\\d+)");
Pattern p3 = Pattern.compile("(.\\d+)-(\\d)+\\s(M\\d+)-IN");
Pattern p5 = Pattern.compile("(.\\d+)-\\d+\\s(T\\d+)-IN");
Pattern p6 = Pattern.compile("VCC\\s(T\\d+)-IN");
Pattern p7 = Pattern.compile("(M|T)\\d+-OUT\\s((M|T)\\d+)-IN");
Pattern p13 = Pattern.compile("(H\\d+)-(\\d+)\\sGND");
Pattern p14 = Pattern.compile("IN\\s(T\\d+)-IN");
Matcher m1 = p1.matcher(str);
Matcher m2 = p2.matcher(str);
Matcher m3 = p11.matcher(str);
Matcher m4 = p12.matcher(str);
Matcher m5 = p3.matcher(str);
Matcher m6 = p4.matcher(str);
Matcher m7 = p5.matcher(str);
Matcher m8 = p6.matcher(str);
Matcher m9 = p7.matcher(str);
Matcher m10 = p13.matcher(str);
Matcher m11 = p14.matcher(str);
Device device = null;
if (m1.find()) {
seriescircuit.setIsMain(1);
String id = m1.group(1);
if (id.charAt(0) == 'K')
device = new Switch(id, 220);
else if (id.charAt(0) == 'F')
device = new BinningGovernor(id, 220);
else if (id.charAt(0) == 'L')
device = new ContinuousGovernor(id, 220);
else if (id.charAt(0) == 'B')
device = new Incandescent(id, 220);
else if (id.charAt(0) == 'R')
device = new fluorescent(id, 220);
else if (id.charAt(0) == 'A')
device = new FloorFan(id, 220);
else if (id.charAt(0) == 'S')
device = new Controlledcurtain(id, 220);
else if (id.charAt(0) == 'H') {
MutexSwitche mutexSwitche = new MutexSwitche(id, 220);
if (Integer.parseInt(m1.group(2)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m1.group(2)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m1.group(2)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m1.group(2)));
mutexSwitche.setState(0);
}
mutexSwitche.calculateOutputV();
mutexSwitche.setResistance();
device = mutexSwitche;
}
else
device = new Ceilinfan(id, 220);
seriescircuit.addDevice(device);
}
if (m2.find()) {
String id = m2.group(3);
if (m2.group(1).charAt(0) == 'H') {
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i).getId().equals(m2.group(1))) {
if (Integer.parseInt(m2.group(2)) == 2) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(2);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m2.group(2)) == 3) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(3);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(0);
}
((MutexSwitche) (seriescircuit.getDevices().get(i))).setResistance();
}
}
}
if (id.charAt(0) == 'K')
device = new Switch(id, 220);
else if (id.charAt(0) == 'F')
device = new BinningGovernor(id, 220);
else if (id.charAt(0) == 'L')
device = new ContinuousGovernor(id, 220);
else if (id.charAt(0) == 'B')
device = new Incandescent(id, 0);
else if (id.charAt(0) == 'R')
device = new fluorescent(id, 0);
else if (id.charAt(0) == 'A')
device = new FloorFan(id, 0);
else if (id.charAt(0) == 'S')
device = new Controlledcurtain(id, 0);
else if (id.charAt(0) == 'H') {
MutexSwitche mutexSwitche = new MutexSwitche(id, 220);
if (Integer.parseInt(m2.group(4)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m2.group(4)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m2.group(4)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m2.group(4)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
}
else
device = new Ceilinfan(id, 0);
seriescircuit.addDevice(device);
}
if (m3.find()) {
String id = m3.group(1);
if (id.charAt(0) == 'K')
device = new Switch(id, 0);
else if (id.charAt(0) == 'F')
device = new BinningGovernor(id, 220);
else if (id.charAt(0) == 'L')
device = new ContinuousGovernor(id, 220);
else if (id.charAt(0) == 'B')
device = new Incandescent(id, 0);
else if (id.charAt(0) == 'R')
device = new fluorescent(id, 0);
else if (id.charAt(0) == 'A')
device = new FloorFan(id, 0);
else if (id.charAt(0) == 'S')
device = new Controlledcurtain(id, 0);
else if (id.charAt(0) == 'H') {
MutexSwitche mutexSwitche = new MutexSwitche(id, 220);
if (Integer.parseInt(m3.group(2)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m3.group(2)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m3.group(2)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m3.group(2)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
} else
device = new Ceilinfan(id, 0);
seriescircuit.addDevice(device);
}
if (m5.find()) {
if(m5.group(1).charAt(0)=='H') {
int falg = 0;
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i).getId().equals(m5.group(1))) {
falg = 1;
if (Integer.parseInt(m5.group(2)) == 2) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(2);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m5.group(2)) == 3) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(3);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(0);
}
((MutexSwitche) (seriescircuit.getDevices().get(i))).setResistance();
}
}
if (falg == 0) {
MutexSwitche mutexSwitche = new MutexSwitche(m5.group(1), 0);
if (Integer.parseInt(m5.group(2)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m5.group(2)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m5.group(2)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m5.group(2)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
seriescircuit.addDevice(device);
}
}
for (int i = 0; i < parallelcircuits.size(); i++) {
if (parallelcircuits.get(i).getId().equals(m5.group(3))) {
device = parallelcircuits.get(i);
seriescircuit.addDevice(device);
}
}
}
if (m4.find()) {
String id = m4.group(2);
if (id.charAt(0) == 'K')
device = new Switch(id, 220);
else if (id.charAt(0) == 'F')
device = new BinningGovernor(id, 220);
else if (id.charAt(0) == 'L')
device = new ContinuousGovernor(id, 220);
else if (id.charAt(0) == 'B')
device = new Incandescent(id, 0);
else if (id.charAt(0) == 'R')
device = new fluorescent(id, 0);
else if (id.charAt(0) == 'A')
device = new FloorFan(id, 0);
else if (id.charAt(0) == 'S')
device = new Controlledcurtain(id, 0);
else if (id.charAt(0) == 'H') {
MutexSwitche mutexSwitche = new MutexSwitche(id, 0);
if (Integer.parseInt(m4.group(3)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m4.group(3)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m4.group(3)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m4.group(3)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
} else
device = new Ceilinfan(id, 0);
seriescircuit.addDevice(device);
}
if (m6.find()) {
seriescircuit.setIsMain(1);
for (int i = 0; i < parallelcircuits.size(); i++) {
if (parallelcircuits.get(i).getId().equals(m6.group(1))) {
device = parallelcircuits.get(i);
device.setOutputV(220);
device.setInputV(220);
}
}
seriescircuit.addDevice(device);
}
if (m7.find()) {
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getId().equals(m7.group(2)))
device = seriescircuits.get(i);
}
seriescircuit.addDevice(device);
}
if (m8.find()) {
seriescircuit.setIsMain(1);
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getId().equals(m8.group(1))) {
device = seriescircuits.get(i);
device.setOutputV(220);
device.setInputV(220);
}
}
seriescircuit.addDevice(device);
}
if (m9.find()) {
if (m9.group(2).charAt(0) == 'M') {
for (int i = 0; i < parallelcircuits.size(); i++) {
if (parallelcircuits.get(i).getId().equals(m9.group(2)))
device = parallelcircuits.get(i);
}
} else if (m9.group(2).charAt(0) == 'T') {
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getId().equals(m9.group(2)))
device = seriescircuits.get(i);
}
}
seriescircuit.addDevice(device);
}
if (m10.find()) {
int falg = 0;
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i).getId().equals(m10.group(1))) {
falg = 1;
if (Integer.parseInt(m10.group(2)) == 2) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(2);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m10.group(2)) == 3) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(3);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(0);
}
((MutexSwitche) (seriescircuit.getDevices().get(i))).setResistance();
}
}
if (falg == 0) {
MutexSwitche mutexSwitche = new MutexSwitche(m10.group(1), 0);
if (Integer.parseInt(m10.group(2)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m10.group(2)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m10.group(2)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m10.group(2)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
seriescircuit.addDevice(device);
}
}
if (m11.find()) {
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getId().equals(m11.group(1)))
device = seriescircuits.get(i);
}
seriescircuit.addDevice(device);
}
}// 用于串联电路添加设备
static void seriescircuitschoose(Seriescircuit seriescircuits) {
for (int i = 0; i < seriescircuits.getDevices().size(); i++) {
if (seriescircuits.getDevices().get(i) instanceof MutexSwitche)
mutexSwitches.add((MutexSwitche) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Switch)
switchs.add((Switch) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof BinningGovernor)
binningGovernors.add((BinningGovernor) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof ContinuousGovernor)
continuousGovernors.add((ContinuousGovernor) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Incandescent)
incandescents.add((Incandescent) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof fluorescent)
fluorescents.add((fluorescent) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Ceilinfan)
ceilinfans.add((Ceilinfan) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Controlledcurtain)
controlledcurtains.add((Controlledcurtain) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Seriescircuit) {
seriescircuitschoose(((Seriescircuit) (seriescircuits.getDevices().get(i))));
} else
floorFans.add((FloorFan) (seriescircuits.getDevices().get(i)));
}
}// 串联电路设备分配到对应数组
static void setSwitchstate(Seriescircuit seriescircuits, Matcher m) {
for (int i = 0; i < seriescircuits.getDevices().size(); i++) {
if (seriescircuits.getDevices().get(i) instanceof Seriescircuit) {
setSwitchstate(((Seriescircuit) (seriescircuits.getDevices().get(i))), m);
}
if (seriescircuits.getDevices().get(i).getId().equals(m.group(1))) {
if (((Switch) (seriescircuits.getDevices().get(i))).getState() == 0)
((Switch) (seriescircuits.getDevices().get(i))).setState(1);
else
((Switch) (seriescircuits.getDevices().get(i))).setState(0);
if (((Switch) (seriescircuits.getDevices().get(i))).getState() == 1) {
seriescircuits.setIsaccess(1);
} else
seriescircuits.setIsaccess(0);
}
}
}// 设置串联电路中的开关状态
static void setSeriescircuitIsaccess(Seriescircuit seriescircuits) {
int index = 0;
for (int i = 0; i < seriescircuits.getDevices().size(); i++) {
if (seriescircuits.getDevices().get(i) instanceof Seriescircuit)
setSeriescircuitIsaccess((Seriescircuit) (seriescircuits.getDevices().get(i)));
if (seriescircuits.getDevices().get(i) instanceof Switch) {
index = 1;
}
}
if (index == 0) {
seriescircuits.setIsaccess(1);
}
seriescircuits.calculateallresistance();
}// 根据开关是否存在设置串联电路是否通路
static void setshow(Device mseriescircuit, Seriescircuit seriescircuit, double r) {
if (seriescircuit.getIsaccess() == 1) {
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i) instanceof Seriescircuit) {
seriescircuit.setOutputV(mseriescircuit.getOutputV() * r);
double ol = ((Seriescircuit) (seriescircuit.getDevices().get(i))).getAllresistance()
/ seriescircuit.getAllresistance();
setshow(seriescircuit, (Seriescircuit) (seriescircuit.getDevices().get(i)), ol);
seriescircuit.calculateOutputV();
}
if (seriescircuit.getDevices().get(i) instanceof Controlleddevices) {
seriescircuit.getDevices().get(i).setOutputV(mseriescircuit.getOutputV() * r
* seriescircuit.getDevices().get(i).resistance / seriescircuit.getAllresistance());
seriescircuit.getDevices().get(i).calculateshow();
}
}
}
}// 计算设备用于输出的信息变化
static int setaccess(Seriescircuit seriescircuit) {
int flag = 0;
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if(seriescircuit.getDevices().get(i) instanceof Seriescircuit) {
if(setaccess((Seriescircuit)(seriescircuit.getDevices().get(i)))==1)
flag=1;
}
if (seriescircuit.getDevices().get(i) instanceof Switch) {
if (((Switch) (seriescircuit.getDevices().get(i))).getState() == 0) {
flag = 1;
break;
}
}
}
return flag;
}
static void setshow(Seriescircuit seriescircuit) {
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
seriescircuit.getDevices().get(i).setOutputV(0);
seriescircuit.getDevices().get(i).calculateshow();
}
}
}
1.2.1 考虑到有新设备的添加对adddevice方法进行了相应的修改。
1.2.2 由于设备中可能出现串联电路于是对最后的设备分类进行了修改,将其改为了一个方法seriescircuitschoose
1.2.3 也是因为设备中可能出现串联电路这一设备,于是对每个设备计算输出电压以及通过输出电压计算相应数值的部分改成了方法,以及附加了一些其他的方法比如判断串联电路是否通路的方法,优化了,简化了很多main方法里的代码。
1.2.4 对于互斥开关的一些情况在最后的输出中做了一定的判断修改。
2.家居强电电路模拟程序-4
2.1 从类图可以看出在上一次的基础上加上了Diode(二极管)类继承自受控设备类。在设备Device类中加入了电流这一属性。
2.2 Main类源代码如下:
public class Main {
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static ArrayList
static int index = -1;// 找到主串联电路
public static void main(String[] args) {
ArrayList<String> command = new ArrayList<>();
ArrayList<String> commandid = new ArrayList<>();
Scanner sc = new Scanner(System.in);
String dl[] = new String[100];
Pattern p4 = Pattern.compile("#((K|F|L|H)\\d+)([^\\[\\]])*");
Pattern p5 = Pattern.compile("#L\\d+:(\\d+.?\\d*)");
Pattern p6 = Pattern.compile("#(K\\d+)");
Pattern p13 = Pattern.compile("#(H\\d+)");
Pattern p7 = Pattern.compile("#(F\\d+)\\+");
Pattern p8 = Pattern.compile("#(F\\d+)-");
Pattern p9 = Pattern.compile("#(T\\d+):\\[.*\\]");
Pattern p10 = Pattern.compile("#M(\\d+):\\[.*\\]");
Pattern p11 = Pattern.compile("#(M\\d+):\\[(T\\d+)");
Pattern p12 = Pattern.compile("\\[*(T\\d+)\\]*");
for (int i = 0;; i++) {
dl[i] = sc.nextLine();
if (dl[i].equals("end"))
break;
Matcher m12 = p9.matcher(dl[i]);
Matcher m13 = p10.matcher(dl[i]);
Matcher m4 = p4.matcher(dl[i]);
if (m12.find()) {
Seriescircuit seriescircuit = new Seriescircuit(m12.group(1), 0);
Pattern pattern = Pattern.compile("\\[([^\\[\\]])*\\]");
Matcher matcher = pattern.matcher(dl[i]);
ArrayList<String> matches = new ArrayList<>();
while (matcher.find()) {
String match = matcher.group(0);
matches.add(match);
}
for (int j = 0; j < matches.size(); j++) {
adddevice(seriescircuit, matches.get(j));
}
seriescircuits.add(seriescircuit);
}
if (m13.find()) {
String s[] = dl[i].split(" ");
Parallelcircuit parallelcircuit = null;
for (int j = 0; j < s.length; j++) {
Matcher m1 = p11.matcher(s[j]);
Matcher m2 = p12.matcher(s[j]);
if (m1.find()) {
parallelcircuit = new Parallelcircuit(m1.group(1), 0);
for (int l = 0; l < seriescircuits.size(); l++) {
if (seriescircuits.get(l).getId().equals(m1.group(2))) {
parallelcircuit.addseriescircuits(seriescircuits.get(l));
}
}
} else if (m2.find()) {
for (int l = 0; l < seriescircuits.size(); l++) {
if (seriescircuits.get(l).getId().equals(m2.group(1))) {
parallelcircuit.addseriescircuits(seriescircuits.get(l));
}
}
} else {
}
}
parallelcircuit.calculateallresistance();
parallelcircuits.add(parallelcircuit);
}
if (m4.find()) {
command.add(m4.group(0));
commandid.add(m4.group(1));
}
}
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getIsMain() == 1) {
index = i;
break;
}
}
int index1 = -1;// 找到主电路控制设备命令
int index3 = -1;// 判断主电路是否有开关
for (int k = 0; k < command.size(); k++) {
if (seriescircuits.get(index).getDevices().get(0) instanceof Controlleddevices) {
for (int j = 1; j < seriescircuits.get(index).getDevices().size(); j++) {
if (commandid.get(k).equals(seriescircuits.get(index).getDevices().get(j).getId())) {
Matcher m11 = p6.matcher(command.get(k));
Matcher m12 = p13.matcher(command.get(k));
if (m11.find()) {
if (seriescircuits.get(index).getDevices().get(j).getId().equals(m11.group(1))) {
index3 = 1;
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 0)
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(1);
else
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(0);
seriescircuits.get(index).getDevices().get(j).calculateOutputV();
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 1)
seriescircuits.get(index).setIsaccess(1);
else
seriescircuits.get(index).setIsaccess(0);
}
}
if (m12.find()) {
if (seriescircuits.get(index).getDevices().get(j).getId().equals(m12.group(1))) {
index3 = 1;
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 0)
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(1);
else
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(0);
seriescircuits.get(index).getDevices().get(j).calculateOutputV();
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 1)
seriescircuits.get(index).setIsaccess(1);
else
seriescircuits.get(index).setIsaccess(0);
}
}
}
}
} else {
for (int m = 0; m < seriescircuits.get(index).getDevices().size(); m++) {
if (commandid.get(k).equals(seriescircuits.get(index).getDevices().get(m).getId())) {
index1 = k;
Matcher m5 = p5.matcher(command.get(k));
Matcher m6 = p6.matcher(command.get(k));
Matcher m20 = p13.matcher(command.get(k));
Matcher m7 = p7.matcher(command.get(k));
Matcher m8 = p8.matcher(command.get(k));
if (m5.find()) {
((ContinuousGovernor) (seriescircuits.get(index).getDevices().get(0)))
.setGearparameter(Double.parseDouble(m5.group(1)));
seriescircuits.get(index).getDevices().get(0).calculateOutputV();
}
if (m6.find()) {
for (int j = 0; j < seriescircuits.get(index).getDevices().size(); j++) {
if (seriescircuits.get(index).getDevices().get(j).getId().equals(m6.group(1))) {
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 0)
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(1);
else
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(0);
seriescircuits.get(index).getDevices().get(j).calculateOutputV();
}
}
}
if (m20.find()) {
for (int j = 0; j < seriescircuits.get(index).getDevices().size(); j++) {
if (seriescircuits.get(index).getDevices().get(j).getId().equals(m20.group(1))) {
if (((Switch) (seriescircuits.get(index).getDevices().get(j))).getState() == 0)
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(1);
else
((Switch) (seriescircuits.get(index).getDevices().get(j))).setState(0);
seriescircuits.get(index).getDevices().get(j).calculateOutputV();
}
}
}
if (m7.find() || m8.find()) {
Matcher m9 = p7.matcher(command.get(k));
Matcher m10 = p8.matcher(command.get(k));
if (m9.find()) {
if (((BinningGovernor) (seriescircuits.get(index).getDevices().get(0))).getId()
.equals(m9.group(1)))
((BinningGovernor) (seriescircuits.get(index).getDevices().get(0))).addGear();
}
if (m10.find()) {
if (((BinningGovernor) (seriescircuits.get(index).getDevices().get(0))).getId()
.equals(m10.group(1)))
((BinningGovernor) (seriescircuits.get(index).getDevices().get(0))).subtractGear();
}
seriescircuits.get(index).getDevices().get(0).calculateOutputV();
}
if (seriescircuits.get(index).getDevices().get(m).getOutputV() != 0) {
seriescircuits.get(index).setIsaccess(1);
} else
seriescircuits.get(index).setIsaccess(0);
}
}
}
}
if (seriescircuits.get(index).getDevices().get(0) instanceof Controlleddevices) {
seriescircuits.get(index).getDevices().get(0)
.setOutputV(seriescircuits.get(index).getDevices().get(0).getInputV());
if (index3 != 1)
seriescircuits.get(index).setIsaccess(1);
}
for (int k = 0; k < command.size(); k++) {
if (k != index1) {
Matcher m11 = p6.matcher(command.get(k));
Matcher m12 = p13.matcher(command.get(k));
if (m11.find()) {
setSwitchstate(seriescircuits.get(index), m11);
}
if (m12.find()) {
setSwitchstate(seriescircuits.get(index), m12);
}
}
}
seriescircuits.get(index).getDevices().get(0).calculateOutputV();
int index2 = 0;// 用于判断串联电路是否含有控制设备
int index4 = 0;
int isaccess = 0;
double r = 0;
int index5 = -1;
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Switch) {
if (((Switch) (seriescircuits.get(index).getDevices().get(i))).getState() == 0)
index5 = 1;
}
}
if (index5 == 1)
seriescircuits.get(index).setIsaccess(0);
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
index4 = 0;
setSeriescircuitIsaccess(((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))));
}
}
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Parallelcircuit) {
for (int p = 0; p < ((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().size(); p++) {
setSeriescircuitIsaccess(((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().get(p));
((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i))).calculateallresistance();
}
}
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))).calculateallresistance();
}
}
seriescircuits.get(index).calculateallresistance();
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
r = ((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))).getAllresistance()
/ seriescircuits.get(index).getAllresistance();
if (index5 == -1) {
if (setaccess(((Seriescircuit) (seriescircuits.get(index).getDevices().get(i)))) == 0) {
seriescircuits.get(index).setIsaccess(1);
setshow(((Device) (seriescircuits.get(index).getDevices().get(0))),
((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))), r);
caculateElectricity(((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))));
} else {
((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))).getDevices().get(0)
.setInputV(seriescircuits.get(index).getDevices().get(0).getOutputV());
seriescircuits.get(index).setIsaccess(0);
break;
}
} else {
seriescircuits.get(index).setIsaccess(0);
break;
}
}
if (seriescircuits.get(index).getDevices().get(i) instanceof Parallelcircuit) {
seriescircuits.get(index).calculateallresistance();
if (index5 == 1) {
seriescircuits.get(index).setIsaccess(0);
}
r = ((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i))).getAllresistance()
/ seriescircuits.get(index).getAllresistance();
for (int k = 0; k < ((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().size(); k++) {
if (index5 == -1) {
if (setaccess(((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().get(k)) == 0) {
seriescircuits.get(index).setIsaccess(1);
setshow(((Device) (seriescircuits.get(index).getDevices().get(0))),
((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().get(k),
r);
caculateElectricity(((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().get(k));
} else {
((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i))).getSeriescircuits()
.get(k).getDevices().get(0)
.setInputV(seriescircuits.get(index).getDevices().get(0).getOutputV());
}
} else {
seriescircuits.get(index).setIsaccess(0);
break;
}
}
}
}
caculateElectricity(seriescircuits.get(index));
if (parallelcircuits.size() == 0) {
seriescircuits.get(index).calculateallresistance();
}
if (seriescircuits.get(index).getIsaccess() == 1)
isaccess = 1;
else
isaccess = 0;
seriescircuits.get(index).getDevices().get(0).calculateOutputV();
double v = seriescircuits.get(index).getDevices().get(0).getOutputV();
if (isaccess == 1) {
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Controlleddevices) {
r = seriescircuits.get(index).getDevices().get(i).resistance
/ seriescircuits.get(index).getAllresistance();
seriescircuits.get(index).getDevices().get(i).setOutputV(v * r);
seriescircuits.get(index).getDevices().get(i).calculateshow();
}
}
} else {
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Controlleddevices) {
seriescircuits.get(index).getDevices().get(i).setOutputV(0);
seriescircuits.get(index).getDevices().get(i).calculateshow();
}
if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
setshow((Seriescircuit) (seriescircuits.get(index).getDevices().get(i)));
}
}
}
for (int i = 0; i < seriescircuits.get(index).getDevices().size(); i++) {
if (seriescircuits.get(index).getDevices().get(i) instanceof Parallelcircuit) {
for (int j = 0; j < ((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().size(); j++) {
seriescircuitschoose(((Parallelcircuit) (seriescircuits.get(index).getDevices().get(i)))
.getSeriescircuits().get(j));
}
} else if (seriescircuits.get(index).getDevices().get(i) instanceof Seriescircuit) {
seriescircuitschoose(((Seriescircuit) (seriescircuits.get(index).getDevices().get(i))));
} else {
if (seriescircuits.get(index).getDevices().get(i) instanceof MutexSwitche)
mutexSwitches.add((MutexSwitche) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof Switch)
switchs.add((Switch) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof BinningGovernor)
binningGovernors.add((BinningGovernor) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof ContinuousGovernor)
continuousGovernors.add((ContinuousGovernor) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof Incandescent)
incandescents.add((Incandescent) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof fluorescent)
fluorescents.add((fluorescent) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof Ceilinfan)
ceilinfans.add((Ceilinfan) (seriescircuits.get(index).getDevices().get(i)));
else if (seriescircuits.get(index).getDevices().get(i) instanceof Controlledcurtain)
controlledcurtains.add((Controlledcurtain) (seriescircuits.get(index).getDevices().get(i)));
else
floorFans.add((FloorFan) (seriescircuits.get(index).getDevices().get(i)));
}
}
Collections.sort(switchs);
Collections.sort(binningGovernors);
Collections.sort(continuousGovernors);
Collections.sort(incandescents);
Collections.sort(fluorescents);
Collections.sort(ceilinfans);
Collections.sort(floorFans);
Collections.sort(mutexSwitches);
Collections.sort(controlledcurtains);
Collections.sort(diodes);
if (seriescircuits.get(index).getElectricity() == Double.POSITIVE_INFINITY) {
System.out.println("short circuit error");
} else {
double bright = 0;
for (int i = 0; i < switchs.size(); i++) {
switchs.get(i).show();
}
for (int i = 0; i < binningGovernors.size(); i++) {
binningGovernors.get(i).show();
}
for (int i = 0; i < continuousGovernors.size(); i++) {
continuousGovernors.get(i).show();
}
for (int i = 0; i < incandescents.size(); i++) {
incandescents.get(i).show();
bright += incandescents.get(i).getBrightness();
}
for (int i = 0; i < fluorescents.size(); i++) {
fluorescents.get(i).show();
bright += fluorescents.get(i).getBrightness();
}
for (int i = 0; i < ceilinfans.size(); i++) {
ceilinfans.get(i).show();
}
for (int i = 0; i < floorFans.size(); i++) {
floorFans.get(i).show();
}
int flag = 0;
String s = null;
for (int i = 0; i < mutexSwitches.size(); i++) {
flag = 0;
if (i >= 1) {
if (s.equals(mutexSwitches.get(i).id) == false) {
if (mutexSwitches.get(i).getOutputPin() == 3) {
for (int j = 0; j < mutexSwitches.size(); j++) {
if (j != i && mutexSwitches.get(j).id.equals(mutexSwitches.get(i).id)) {
if (mutexSwitches.get(j).getElectricity() <= 20) {
System.out.println(mutexSwitches.get(j).show1() + "-"
+ (int) mutexSwitches.get(i).outputV);
} else {
System.out.println(
mutexSwitches.get(j).show1() + "-" + (int) mutexSwitches.get(i).outputV
+ " exceeding current limit error");
}
s = mutexSwitches.get(j).id;
flag = 1;
}
}
if (flag == 0) {
s = mutexSwitches.get(i).id;
if (mutexSwitches.get(i).getState() == 1) {
System.out.println("@" + mutexSwitches.get(i).id + ":turned on");
} else
System.out.println("@" + mutexSwitches.get(i).id + ":closed");
}
} else if (mutexSwitches.get(i).getOutputPin() == 2) {
for (int j = 0; j < mutexSwitches.size(); j++) {
if (j != i && mutexSwitches.get(j).id.equals(mutexSwitches.get(i).id)) {
if (mutexSwitches.get(i).getElectricity() <= 20) {
System.out.println(mutexSwitches.get(i).show1() + "-"
+ (int) mutexSwitches.get(j).outputV);
} else {
System.out.println(
mutexSwitches.get(i).show1() + "-" + (int) mutexSwitches.get(j).outputV
+ " exceeding current limit error");
}
s = mutexSwitches.get(i).id;
flag = 1;
}
}
if (flag == 0) {
s = mutexSwitches.get(i).id;
if (mutexSwitches.get(i).getState() == 0) {
System.out.println("@" + mutexSwitches.get(i).id + ":turned on");
} else
System.out.println("@" + mutexSwitches.get(i).id + ":closed");
}
}
}
} else {
if (mutexSwitches.get(i).getOutputPin() == 3) {
for (int j = 0; j < mutexSwitches.size(); j++) {
if (j != i && mutexSwitches.get(j).id.equals(mutexSwitches.get(i).id)) {
if (mutexSwitches.get(j).getElectricity() <= 20) {
System.out.println(
mutexSwitches.get(j).show1() + "-" + (int) mutexSwitches.get(i).outputV);
} else {
System.out.println(mutexSwitches.get(j).show1() + "-"
+ (int) mutexSwitches.get(i).outputV + " exceeding current limit error");
}
s = mutexSwitches.get(j).id;
flag = 1;
}
}
if (flag == 0) {
s = mutexSwitches.get(i).id;
if (mutexSwitches.get(i).getState() == 1) {
System.out.println("@" + mutexSwitches.get(i).id + ":turned on");
} else
System.out.println("@" + mutexSwitches.get(i).id + ":closed");
}
} else if (mutexSwitches.get(i).getOutputPin() == 2) {
for (int j = 0; j < mutexSwitches.size(); j++) {
if (j != i && mutexSwitches.get(j).id.equals(mutexSwitches.get(i).id)) {
if (mutexSwitches.get(i).getElectricity() <= 20) {
System.out.println(
mutexSwitches.get(i).show1() + "-" + (int) mutexSwitches.get(j).outputV);
} else {
System.out.println(mutexSwitches.get(i).show1() + "-"
+ (int) mutexSwitches.get(j).outputV + " exceeding current limit error");
}
s = mutexSwitches.get(i).id;
flag = 1;
}
}
if (flag == 0) {
s = mutexSwitches.get(i).id;
if (mutexSwitches.get(i).getState() == 0) {
System.out.println("@" + mutexSwitches.get(i).id + ":turned on");
} else
System.out.println("@" + mutexSwitches.get(i).id + ":closed");
}
}
}
}
for (int i = 0; i < controlledcurtains.size(); i++) {
controlledcurtains.get(i).setBrightness(bright);
controlledcurtains.get(i).calculateshow();
controlledcurtains.get(i).show();
}
for (int i = 0; i < diodes.size(); i++) {
diodes.get(i).show();
}
}
}
static void adddevice(Seriescircuit seriescircuit, String str) {
Pattern p1 = Pattern.compile("VCC\\s(.\\d+)-(\\d+)");
Pattern p4 = Pattern.compile("VCC\\s(M\\d+)-IN");
Pattern p2 = Pattern.compile("(.\\d+)-(\\d+)\\s(.\\d+)-(\\d+)");
Pattern p11 = Pattern.compile("IN\\s(.\\d+)-(\\d+)");
Pattern p12 = Pattern.compile("(M|T)\\d+-OUT\\s(.\\d+)-(\\d+)");
Pattern p3 = Pattern.compile("(.\\d+)-(\\d)+\\s(M\\d+)-IN");
Pattern p5 = Pattern.compile("(.\\d+)-\\d+\\s(T\\d+)-IN");
Pattern p6 = Pattern.compile("VCC\\s(T\\d+)-IN");
Pattern p7 = Pattern.compile("(M|T)\\d+-OUT\\s((M|T)\\d+)-IN");
Pattern p13 = Pattern.compile("(H\\d+)-(\\d+)\\sGND");
Pattern p14 = Pattern.compile("IN\\s(T\\d+)-IN");
Pattern p15 = Pattern.compile("IN\\s(M\\d+)-IN");
Matcher m1 = p1.matcher(str);
Matcher m2 = p2.matcher(str);
Matcher m3 = p11.matcher(str);
Matcher m4 = p12.matcher(str);
Matcher m5 = p3.matcher(str);
Matcher m6 = p4.matcher(str);
Matcher m7 = p5.matcher(str);
Matcher m8 = p6.matcher(str);
Matcher m9 = p7.matcher(str);
Matcher m10 = p13.matcher(str);
Matcher m11 = p14.matcher(str);
Matcher m12 = p15.matcher(str);
Device device = null;
if (m1.find()) {
seriescircuit.setIsMain(1);
String id = m1.group(1);
if (id.charAt(0) == 'K')
device = new Switch(id, 220);
else if (id.charAt(0) == 'F')
device = new BinningGovernor(id, 220);
else if (id.charAt(0) == 'L')
device = new ContinuousGovernor(id, 220);
else if (id.charAt(0) == 'B')
device = new Incandescent(id, 220);
else if (id.charAt(0) == 'R')
device = new fluorescent(id, 220);
else if (id.charAt(0) == 'A')
device = new FloorFan(id, 220);
else if (id.charAt(0) == 'S')
device = new Controlledcurtain(id, 220);
else if (id.charAt(0) == 'H') {
MutexSwitche mutexSwitche = new MutexSwitche(id, 220);
if (Integer.parseInt(m1.group(2)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m1.group(2)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m1.group(2)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m1.group(2)));
mutexSwitche.setState(0);
}
mutexSwitche.calculateOutputV();
mutexSwitche.setResistance();
device = mutexSwitche;
} else if (id.charAt(0) == 'P') {
device = new Diode(id, 220);
device.setOutputPin(Integer.parseInt(m1.group(2)));
if (Integer.parseInt(m1.group(2)) == 2) {
seriescircuit.setIsaccess(0);
}
}
else
device = new Ceilinfan(id, 220);
device.setOutputV(220);
device.setOutputPin(Integer.parseInt(m1.group(2)));
seriescircuit.addDevice(device);
}
if (m2.find()) {
String id = m2.group(3);
if (m2.group(1).charAt(0) == 'H') {
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i).getId().equals(m2.group(1))) {
if (Integer.parseInt(m2.group(2)) == 2) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(2);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m2.group(2)) == 3) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(3);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(0);
}
((MutexSwitche) (seriescircuit.getDevices().get(i))).setResistance();
}
}
}
if (id.charAt(0) == 'K')
device = new Switch(id, 220);
else if (id.charAt(0) == 'F')
device = new BinningGovernor(id, 220);
else if (id.charAt(0) == 'L')
device = new ContinuousGovernor(id, 220);
else if (id.charAt(0) == 'B')
device = new Incandescent(id, 0);
else if (id.charAt(0) == 'R')
device = new fluorescent(id, 0);
else if (id.charAt(0) == 'A')
device = new FloorFan(id, 0);
else if (id.charAt(0) == 'S')
device = new Controlledcurtain(id, 0);
else if (id.charAt(0) == 'P') {
device = new Diode(id, 0);
device.setOutputPin(Integer.parseInt(m2.group(4)));
if (Integer.parseInt(m2.group(4)) == 2) {
seriescircuit.setIsaccess(0);
}
}
else if (id.charAt(0) == 'H') {
MutexSwitche mutexSwitche = new MutexSwitche(id, 0);
if (Integer.parseInt(m2.group(4)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m2.group(4)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m2.group(4)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m2.group(4)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
}
else
device = new Ceilinfan(id, 0);
device.setOutputPin(Integer.parseInt(m2.group(4)));
seriescircuit.addDevice(device);
}
if (m3.find()) {
String id = m3.group(1);
if (id.charAt(0) == 'K')
device = new Switch(id, 0);
else if (id.charAt(0) == 'F')
device = new BinningGovernor(id, 220);
else if (id.charAt(0) == 'L')
device = new ContinuousGovernor(id, 220);
else if (id.charAt(0) == 'B')
device = new Incandescent(id, 0);
else if (id.charAt(0) == 'R')
device = new fluorescent(id, 0);
else if (id.charAt(0) == 'A')
device = new FloorFan(id, 0);
else if (id.charAt(0) == 'P') {
device = new Diode(id, 0);
device.setOutputPin(Integer.parseInt(m3.group(2)));
if (Integer.parseInt(m3.group(2)) == 2) {
seriescircuit.setIsaccess(0);
}
}
else if (id.charAt(0) == 'S')
device = new Controlledcurtain(id, 0);
else if (id.charAt(0) == 'H') {
MutexSwitche mutexSwitche = new MutexSwitche(id, 0);
if (Integer.parseInt(m3.group(2)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m3.group(2)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m3.group(2)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m3.group(2)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
} else
device = new Ceilinfan(id, 0);
device.setOutputPin(Integer.parseInt(m3.group(2)));
seriescircuit.addDevice(device);
}
if (m5.find()) {
if (m5.group(1).charAt(0) == 'H') {
int falg = 0;
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i).getId().equals(m5.group(1))) {
falg = 1;
if (Integer.parseInt(m5.group(2)) == 2) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(2);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m5.group(2)) == 3) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(3);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(0);
}
((MutexSwitche) (seriescircuit.getDevices().get(i))).setResistance();
}
}
if (falg == 0) {
MutexSwitche mutexSwitche = new MutexSwitche(m5.group(1), 0);
if (Integer.parseInt(m5.group(2)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m5.group(2)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m5.group(2)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m5.group(2)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
seriescircuit.addDevice(device);
}
}
for (int i = 0; i < parallelcircuits.size(); i++) {
if (parallelcircuits.get(i).getId().equals(m5.group(3))) {
device = parallelcircuits.get(i);
seriescircuit.addDevice(device);
}
}
}
if (m4.find()) {
String id = m4.group(2);
if (id.charAt(0) == 'K')
device = new Switch(id, 220);
else if (id.charAt(0) == 'F')
device = new BinningGovernor(id, 220);
else if (id.charAt(0) == 'L')
device = new ContinuousGovernor(id, 220);
else if (id.charAt(0) == 'B')
device = new Incandescent(id, 0);
else if (id.charAt(0) == 'R')
device = new fluorescent(id, 0);
else if (id.charAt(0) == 'A')
device = new FloorFan(id, 0);
else if (id.charAt(0) == 'S')
device = new Controlledcurtain(id, 0);
else if (id.charAt(0) == 'P') {
device = new Diode(id, 0);
device.setOutputPin(Integer.parseInt(m4.group(3)));
if (Integer.parseInt(m4.group(3)) == 2) {
seriescircuit.setIsaccess(0);
}
}
else if (id.charAt(0) == 'H') {
MutexSwitche mutexSwitche = new MutexSwitche(id, 0);
if (Integer.parseInt(m4.group(3)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m4.group(3)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m4.group(3)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m4.group(3)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
} else
device = new Ceilinfan(id, 0);
device.setOutputPin(Integer.parseInt(m4.group(3)));
seriescircuit.addDevice(device);
}
if (m6.find()) {
seriescircuit.setIsMain(1);
for (int i = 0; i < parallelcircuits.size(); i++) {
if (parallelcircuits.get(i).getId().equals(m6.group(1))) {
device = parallelcircuits.get(i);
device.setOutputV(220);
device.setInputV(220);
}
}
seriescircuit.addDevice(device);
}
if (m7.find()) {
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getId().equals(m7.group(2)))
device = seriescircuits.get(i);
}
seriescircuit.addDevice(device);
}
if (m8.find()) {
seriescircuit.setIsMain(1);
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getId().equals(m8.group(1))) {
device = seriescircuits.get(i);
device.setOutputV(220);
device.setInputV(220);
}
}
seriescircuit.addDevice(device);
}
if (m9.find()) {
if (m9.group(2).charAt(0) == 'M') {
for (int i = 0; i < parallelcircuits.size(); i++) {
if (parallelcircuits.get(i).getId().equals(m9.group(2)))
device = parallelcircuits.get(i);
}
} else if (m9.group(2).charAt(0) == 'T') {
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getId().equals(m9.group(2)))
device = seriescircuits.get(i);
}
}
seriescircuit.addDevice(device);
}
if (m10.find()) {
int falg = 0;
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i).getId().equals(m10.group(1))) {
falg = 1;
if (Integer.parseInt(m10.group(2)) == 2) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(2);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m10.group(2)) == 3) {
((MutexSwitche) (seriescircuit.getDevices().get(i))).setOutputPin(3);
((MutexSwitche) (seriescircuit.getDevices().get(i))).setState(0);
}
((MutexSwitche) (seriescircuit.getDevices().get(i))).setResistance();
}
}
if (falg == 0) {
MutexSwitche mutexSwitche = new MutexSwitche(m10.group(1), 0);
if (Integer.parseInt(m10.group(2)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m10.group(2)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m10.group(2)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m10.group(2)));
mutexSwitche.setState(0);
}
mutexSwitche.setResistance();
device = mutexSwitche;
seriescircuit.addDevice(device);
}
}
if (m11.find()) {
for (int i = 0; i < seriescircuits.size(); i++) {
if (seriescircuits.get(i).getId().equals(m11.group(1)))
device = seriescircuits.get(i);
}
seriescircuit.addDevice(device);
}
if (m12.find()) {
for (int i = 0; i < parallelcircuits.size(); i++) {
if (parallelcircuits.get(i).getId().equals(m12.group(1)))
device = parallelcircuits.get(i);
}
seriescircuit.addDevice(device);
}
}// 用于串联电路添加设备
static void seriescircuitschoose(Seriescircuit seriescircuits) {
for (int i = 0; i < seriescircuits.getDevices().size(); i++) {
if (seriescircuits.getDevices().get(i) instanceof MutexSwitche)
mutexSwitches.add((MutexSwitche) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Switch)
switchs.add((Switch) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof BinningGovernor)
binningGovernors.add((BinningGovernor) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof ContinuousGovernor)
continuousGovernors.add((ContinuousGovernor) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Incandescent)
incandescents.add((Incandescent) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof fluorescent)
fluorescents.add((fluorescent) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Ceilinfan)
ceilinfans.add((Ceilinfan) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Controlledcurtain)
controlledcurtains.add((Controlledcurtain) (seriescircuits.getDevices().get(i)));
else if (seriescircuits.getDevices().get(i) instanceof Seriescircuit) {
seriescircuitschoose(((Seriescircuit) (seriescircuits.getDevices().get(i))));
} else if (seriescircuits.getDevices().get(i) instanceof Diode) {
diodes.add((Diode) (seriescircuits.getDevices().get(i)));
} else if (seriescircuits.getDevices().get(i) instanceof Parallelcircuit) {
for (int j = 0; j < ((Parallelcircuit) (seriescircuits.getDevices().get(i))).getSeriescircuits()
.size(); j++) {
seriescircuitschoose(
((Parallelcircuit) (seriescircuits.getDevices().get(i))).getSeriescircuits().get(j));
}
} else
floorFans.add((FloorFan) (seriescircuits.getDevices().get(i)));
}
}// 串联电路设备分配到对应数组
// static ArrayList
// return parallelcircuit.getSeriescircuits();
// }
static void setSwitchstate(Seriescircuit seriescircuits, Matcher m) {
for (int i = 0; i < seriescircuits.getDevices().size(); i++) {
if (seriescircuits.getDevices().get(i) instanceof Seriescircuit) {
setSwitchstate(((Seriescircuit) (seriescircuits.getDevices().get(i))), m);
}
if (seriescircuits.getDevices().get(i) instanceof Parallelcircuit) {
for (int j = 0; j < ((Parallelcircuit) (seriescircuits.getDevices().get(i))).getSeriescircuits()
.size(); j++) {
setSwitchstate(((Parallelcircuit) (seriescircuits.getDevices().get(i))).getSeriescircuits().get(j),
m);
}
}
if (seriescircuits.getDevices().get(i).getId().equals(m.group(1))) {
if (((Switch) (seriescircuits.getDevices().get(i))).getState() == 0)
((Switch) (seriescircuits.getDevices().get(i))).setState(1);
else
((Switch) (seriescircuits.getDevices().get(i))).setState(0);
if (((Switch) (seriescircuits.getDevices().get(i))).getState() == 1) {
seriescircuits.setIsaccess(1);
} else
seriescircuits.setIsaccess(0);
}
}
}// 设置串联电路中的开关状态
static void setSeriescircuitIsaccess(Seriescircuit seriescircuits) {
int index = 0;
for (int i = 0; i < seriescircuits.getDevices().size(); i++) {
if (seriescircuits.getDevices().get(i) instanceof Seriescircuit)
setSeriescircuitIsaccess((Seriescircuit) (seriescircuits.getDevices().get(i)));
if (seriescircuits.getDevices().get(i) instanceof Parallelcircuit) {
for (int j = 0; j < ((Parallelcircuit) (seriescircuits.getDevices().get(i))).getSeriescircuits()
.size(); j++) {
setSeriescircuitIsaccess(
((Parallelcircuit) (seriescircuits.getDevices().get(i))).getSeriescircuits().get(j));
}
}
if (seriescircuits.getDevices().get(i) instanceof Switch) {
index = 1;
}
}
if (index == 0) {
seriescircuits.setIsaccess(1);
}
seriescircuits.calculateallresistance();
}// 根据开关是否存在设置串联电路是否通路
static void setshow(Device mseriescircuit, Seriescircuit seriescircuit, double r) {
if (seriescircuit.getIsaccess() == 1) {
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i) instanceof Seriescircuit) {
seriescircuit.setOutputV(mseriescircuit.getOutputV() * r);
double ol = ((Seriescircuit) (seriescircuit.getDevices().get(i))).getAllresistance()
/ seriescircuit.getAllresistance();
setshow(seriescircuit, (Seriescircuit) (seriescircuit.getDevices().get(i)), ol);
seriescircuit.calculateOutputV();
}
if (seriescircuit.getDevices().get(i) instanceof Parallelcircuit) {
seriescircuit.setOutputV(mseriescircuit.getOutputV() * r);
double ol = ((Parallelcircuit) (seriescircuit.getDevices().get(i))).getAllresistance()
/ seriescircuit.getAllresistance();
if (i >=1) {
seriescircuit.getDevices().get(i - 1).setOutputV(mseriescircuit.getOutputV() * r * ol);
}
for (int j = 0; j < ((Parallelcircuit) (seriescircuit.getDevices().get(i))).getSeriescircuits()
.size(); j++) {
setshow(seriescircuit,
((Parallelcircuit) (seriescircuit.getDevices().get(i))).getSeriescircuits().get(j), ol);
}
}
if (seriescircuit.getDevices().get(i) instanceof Diode) {
if (i == 0) {
if (seriescircuit.getDevices().size() == 1) {
if (((Diode) (seriescircuit.getDevices().get(i))).getOutputPin() == 2) {
seriescircuit.getDevices().get(i).setOutputV(0);
seriescircuit.setIsaccess(0);
seriescircuit.getDevices().get(i).setInputV(mseriescircuit.getOutputV() * r);
break;
} else
seriescircuit.getDevices().get(i).setOutputV(0);
seriescircuit.getDevices().get(i).setInputV(mseriescircuit.getOutputV() * r);
} else {
if (((Diode) (seriescircuit.getDevices().get(i))).getOutputPin() == 2) {
seriescircuit.getDevices().get(i).setOutputV(0);
seriescircuit.getDevices().get(i + 1).setOutputV(0);
seriescircuit.setIsaccess(0);
seriescircuit.getDevices().get(i).setInputV(mseriescircuit.getOutputV() * r);
break;
} else
seriescircuit.getDevices().get(i).setOutputV(mseriescircuit.getOutputV() * r);
seriescircuit.getDevices().get(i).setInputV(mseriescircuit.getOutputV() * r);
}
} else {
if (((Diode) (seriescircuit.getDevices().get(i))).getOutputPin() == 2) {
seriescircuit.getDevices().get(i).setOutputV(0);
} else {
seriescircuit.getDevices().get(i).setOutputV(seriescircuit.getDevices().get(i - 1).getOutputV());
if (i + 1 == seriescircuit.getDevices().size()) {
seriescircuit.getDevices().get(i).setOutputV(0);
}
}
seriescircuit.getDevices().get(i).setInputV(seriescircuit.getDevices().get(i - 1).getOutputV());
}
} else if (seriescircuit.getDevices().get(i) instanceof Controlleddevices) {
if (i == 0) {
if (seriescircuit.getDevices().size() == 1) {
seriescircuit.getDevices().get(i).setInputV(mseriescircuit.getOutputV() * r);
seriescircuit.getDevices().get(i).setOutputV(mseriescircuit.getOutputV() * r
* seriescircuit.getDevices().get(i).resistance / seriescircuit.getAllresistance());
seriescircuit.getDevices().get(i).calculateshow();
seriescircuit.getDevices().get(i).setOutputV(0);
} else {
seriescircuit.getDevices().get(i).setInputV(mseriescircuit.getOutputV() * r);
seriescircuit.getDevices().get(i).setOutputV(mseriescircuit.getOutputV() * r
* seriescircuit.getDevices().get(i).resistance / seriescircuit.getAllresistance());
seriescircuit.getDevices().get(i).calculateshow();
}
} else {
seriescircuit.getDevices().get(i).setInputV(seriescircuit.getDevices().get(i - 1).getOutputV());
seriescircuit.getDevices().get(i).setOutputV(mseriescircuit.getOutputV() * r
* seriescircuit.getDevices().get(i).resistance / seriescircuit.getAllresistance());
seriescircuit.getDevices().get(i).calculateshow();
if (i + 1 == seriescircuit.getDevices().size()) {
seriescircuit.getDevices().get(i).setOutputV(0);
}
}
}
if (seriescircuit.getDevices().get(i) instanceof Switch) {
if (i == 0) {
if (seriescircuit.getDevices().size() == 1) {
seriescircuit.getDevices().get(i).setInputV(mseriescircuit.getOutputV() * r);
seriescircuit.getDevices().get(i).setOutputV(0);
} else {
seriescircuit.getDevices().get(i).setInputV(mseriescircuit.getOutputV() * r);
seriescircuit.getDevices().get(i).setOutputV(mseriescircuit.getOutputV() * r);
}
} else {
seriescircuit.getDevices().get(i).setInputV(seriescircuit.getDevices().get(i - 1).getOutputV());
seriescircuit.getDevices().get(i).setOutputV(mseriescircuit.getOutputV() * r);
// if (i + 1 == seriescircuit.getDevices().size()) {
// seriescircuit.getDevices().get(i).setOutputV(0);
// }
}
seriescircuit.getDevices().get(i).calculateshow();
}
}
} else {
if (seriescircuit.getDevices().size() == 1) {
if (seriescircuit.getDevices().get(0) instanceof Switch) {
if (((Switch) (seriescircuit.getDevices().get(0))).getState() == 0) {
seriescircuit.getDevices().get(0).setOutputV(0);
} else {
seriescircuit.getDevices().get(0).setOutputV(0);
}
seriescircuit.getDevices().get(0).setInputV(mseriescircuit.getOutputV() * r);
} else if (seriescircuit.getDevices().get(0) instanceof Diode) {
if (((Diode) (seriescircuit.getDevices().get(0))).getOutputPin() == 2) {
seriescircuit.getDevices().get(0).setOutputV(0);
} else {
seriescircuit.getDevices().get(0).setOutputV(0);
}
seriescircuit.getDevices().get(0).setInputV(mseriescircuit.getOutputV() * r);
} else if (seriescircuit.getDevices().get(0) instanceof Controlleddevices) {
seriescircuit.getDevices().get(0).setOutputV(0);
seriescircuit.getDevices().get(0).setInputV(mseriescircuit.getOutputV() * r);
}
} else {
if (seriescircuit.getDevices().get(0) instanceof Switch) {
if (((Switch) (seriescircuit.getDevices().get(0))).getState() == 0) {
seriescircuit.getDevices().get(0).setOutputV(0);
} else {
seriescircuit.getDevices().get(0).setOutputV(mseriescircuit.getOutputV() * r);
seriescircuit.getDevices().get(1).setOutputV(mseriescircuit.getOutputV() * r);
}
seriescircuit.getDevices().get(0).setInputV(mseriescircuit.getOutputV() * r);
} else if (seriescircuit.getDevices().get(0) instanceof Diode) {
if (((Diode) (seriescircuit.getDevices().get(0))).getOutputPin() == 2) {
seriescircuit.getDevices().get(0).setOutputV(0);
seriescircuit.getDevices().get(1).setOutputV(0);
} else {
seriescircuit.getDevices().get(0).setOutputV(mseriescircuit.getOutputV() * r);
seriescircuit.getDevices().get(1).setOutputV(mseriescircuit.getOutputV() * r);
}
seriescircuit.getDevices().get(0).setInputV(mseriescircuit.getOutputV() * r);
} else if (seriescircuit.getDevices().get(0) instanceof Controlleddevices) {
seriescircuit.getDevices().get(0).setOutputV(mseriescircuit.getOutputV() * r);
seriescircuit.getDevices().get(0).setInputV(mseriescircuit.getOutputV() * r);
seriescircuit.getDevices().get(1).setOutputV(mseriescircuit.getOutputV() * r);
}
}
}
}// 计算设备用于输出的信息变化
static int setaccess(Seriescircuit seriescircuit) {
int flag = 0;
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i) instanceof Seriescircuit) {
if (setaccess((Seriescircuit) (seriescircuit.getDevices().get(i))) == 1)
flag = 1;
}
if (seriescircuit.getDevices().get(i) instanceof Parallelcircuit) {
for (int j = 0; j < ((Parallelcircuit) (seriescircuit.getDevices().get(i))).getSeriescircuits()
.size(); j++) {
if (setaccess(
((Parallelcircuit) (seriescircuit.getDevices().get(i))).getSeriescircuits().get(j)) == 0)
flag = 0;
}
}
if (seriescircuit.getDevices().get(i) instanceof Switch) {
if (((Switch) (seriescircuit.getDevices().get(i))).getState() == 0) {
flag = 1;
break;
}
}
if (seriescircuit.getDevices().get(i) instanceof Diode) {
if (seriescircuit.getDevices().get(i).getOutputPin() == 2) {
flag = 1;
break;
}
}
}
return flag;
}
static void setshow(Seriescircuit seriescircuit) {
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
seriescircuit.getDevices().get(i).setOutputV(0);
seriescircuit.getDevices().get(i).calculateshow();
}
}
static void caculateElectricity(Seriescircuit seriescircuit) {
double e = 0;
if (seriescircuit.getId().equals(seriescircuits.get(index).getId())) {
e = seriescircuits.get(index).getDevices().get(0).getOutputV()
/ seriescircuits.get(index).getAllresistance();
seriescircuits.get(index).setElectricity(e);
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
seriescircuit.getDevices().get(i).setElectricity(e);
if (seriescircuit.getDevices().get(i).getElectricity() > seriescircuit.getDevices().get(i)
.getMaxelectricity()) {
if (seriescircuit.getDevices().get(i) instanceof Controlleddevices && i != 0)
seriescircuit.getDevices().get(i).setOutputV(0);
}
}
} else {
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
e = seriescircuit.getDevices().get(0).getInputV() / seriescircuit.getAllresistance();
if (seriescircuit.getDevices().get(i) instanceof Seriescircuit)
caculateElectricity((Seriescircuit) (seriescircuit.getDevices().get(i)));
if (seriescircuit.getDevices().get(i) instanceof Parallelcircuit) {
for (int j = 0; j < ((Parallelcircuit) (seriescircuit.getDevices().get(i))).getSeriescircuits()
.size(); j++) {
caculateElectricity(
((Parallelcircuit) (seriescircuit.getDevices().get(i))).getSeriescircuits().get(j));
}
}
}
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
seriescircuit.getDevices().get(i).setElectricity(e);
if (seriescircuit.getDevices().get(i).getElectricity() > seriescircuit.getDevices().get(i)
.getMaxelectricity()) {
if (seriescircuit.getDevices().get(i) instanceof Controlleddevices && i != 0)
seriescircuit.getDevices().get(i).setOutputV(0);
}
}
}
}// 计算串联电路的电流
}
2.2.1 添加了新设备addadvice方法肯定要做了相应的修改。
2.2.2 因为要考虑设备引脚两段电压,对电压的计算方面做了修改
2.2.3 要考虑并联电路套并联电路的问题,在计算输出电压,以及根据电压计算相关数据的方法做了修改。
2.2.4 添加了计算电流的方法caculateElectricity。
三、踩坑心得
1.家居强电电路模拟程序-3
在一些复杂的计算中刚开始只是进行反复的嵌套,使得代码又臭又长,可读性降低,就算是复制粘贴的过程都时常出错,还得反复确认,浪费大把时间。
2.家居强电电路模拟程序-4
在最开始的时候没有考虑引脚的问题,在这次的输出引脚电压中做起来困难,改了很多还是没有考虑全面。
四、改进建议
1.家居强电电路模拟程序-3
static void setshow(Device mseriescircuit, Seriescircuit seriescircuit, double r) {
if (seriescircuit.getIsaccess() == 1) {
for (int i = 0; i < seriescircuit.getDevices().size(); i++) {
if (seriescircuit.getDevices().get(i) instanceof Seriescircuit) {
seriescircuit.setOutputV(mseriescircuit.getOutputV() * r);
double ol = ((Seriescircuit) (seriescircuit.getDevices().get(i))).getAllresistance()
/ seriescircuit.getAllresistance();
setshow(seriescircuit, (Seriescircuit) (seriescircuit.getDevices().get(i)), ol);
seriescircuit.calculateOutputV();
}
if (seriescircuit.getDevices().get(i) instanceof Controlleddevices) {
seriescircuit.getDevices().get(i).setOutputV(mseriescircuit.getOutputV() * r
* seriescircuit.getDevices().get(i).resistance / seriescircuit.getAllresistance());
seriescircuit.getDevices().get(i).calculateshow();
}
}
}
}// 计算设备用于输出的信息变化
这里是将需要进行的部分写成方法,这样在main方法中省去了很多代码,也将可读性升高了。
2.家居强电电路模拟程序-4
这里是在设备添加的方法中加入了引脚的添加
部分代码如下:
if (m1.find()) {
seriescircuit.setIsMain(1);
String id = m1.group(1);
if (id.charAt(0) == 'K')
device = new Switch(id, 220);
else if (id.charAt(0) == 'F')
device = new BinningGovernor(id, 220);
else if (id.charAt(0) == 'L')
device = new ContinuousGovernor(id, 220);
else if (id.charAt(0) == 'B')
device = new Incandescent(id, 220);
else if (id.charAt(0) == 'R')
device = new fluorescent(id, 220);
else if (id.charAt(0) == 'A')
device = new FloorFan(id, 220);
else if (id.charAt(0) == 'S')
device = new Controlledcurtain(id, 220);
else if (id.charAt(0) == 'H') {
MutexSwitche mutexSwitche = new MutexSwitche(id, 220);
if (Integer.parseInt(m1.group(2)) == 2) {
mutexSwitche.setOutputPin(Integer.parseInt(m1.group(2)));
mutexSwitche.setState(1);
seriescircuit.setIsaccess(1);
}
if (Integer.parseInt(m1.group(2)) == 3) {
mutexSwitche.setOutputPin(Integer.parseInt(m1.group(2)));
mutexSwitche.setState(0);
}
mutexSwitche.calculateOutputV();
mutexSwitche.setResistance();
device = mutexSwitche;
} else if (id.charAt(0) == 'P') {
device = new Diode(id, 220);
device.setOutputPin(Integer.parseInt(m1.group(2)));
if (Integer.parseInt(m1.group(2)) == 2) {
seriescircuit.setIsaccess(0);
}
}
else
device = new Ceilinfan(id, 220);
device.setOutputV(220);
device.setOutputPin(Integer.parseInt(m1.group(2)));
seriescircuit.addDevice(device);
}
五、总结
1.通过这两次的题集主要是明白了对于要反复用到的部分还是最好写成方法,这样不就能省去大量的代码,还能简单易读
2.在每一次的题集中的训练都是一个提升。
六、建议
老师上课的代码演示很有必要,可以更好理解运用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步