一、前言
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.在每一次的題集中的訓練都是一個提升。
六、建議
老師上課的程式碼演示很有必要,可以更好理解運用。