- 1.前言:
- 2.設計與分析:
- 3.採坑心得:
- 4.改進建議:
- 5.總結:
----------------------------------------------------------------------------------------------------------------------------------
PTA作業總結
1.前言:
這次的作業相比於前幾次的作業來說難度上升了很多,需要很多的時間去寫題目以及思考,第七次大作業新增的互斥開關需要考慮的點就有很多,更不要說最後一次的作業,不僅僅增加了二極體,還增加了輸出的條件,在輸出的時候還要將每個電器的各個電勢給輸出。本來物理就不是很好,寫的就更加頭疼,在圖書館裡面待了幾天,最後寫出來的分數也不盡人意。題目的難度雖然增加了,但是可能是到了學期末吧,在Java上花的時間也更多了,沒有思路的時候在圖書館裡一個人靜靜的看題目,就又有一點靈感,然後繼續寫下去。題目變難了,但是新的題目也更加的符合新增的家庭電路,更符合實際的條件,也為我們以後去寫相關的程式碼的時候增加了一些經驗,不再會像以前剛碰到此類題目一樣無從下手。總的來說的話,第七次作業加的是互斥開關需要考慮的就是它的兩個開關的狀態,而最後一次作業需要重點考慮的則是每一個電器其兩端的電勢。
2.設計與分析:
(1)第七次大作業
點選檢視題目
7-1 家居強電電路模擬程式-3
分數 100
作者 蔡軻
單位 南昌航空大學
智慧家居是在當下家庭中越來越流行的一種配置方案,它透過物聯網技術將家中的各種裝置(如音影片裝置、照明系統、窗簾控制、空調控制、安防系統、數字影院系統、影音伺服器、影櫃系統、網路家電等)連線到一起,提供家電控制、照明控制、電話遠端控制、室內外遙控、防盜報警、環境監測、暖通控制、紅外轉發以及可程式設計定時控制等多種功能和手段。與普通家居相比,智慧家居不僅具有傳統的居住功能,兼備建築、網路通訊、資訊家電、裝置自動化,提供全方位的資訊互動功能。請根據如下要去設計一個智慧家居強電電路模擬系統。以下題目介紹中加粗的部分為本次迭代在“家居強電電路模擬程式-2”的基礎上增加的功能要求。
1、控制裝置
本題模擬的控制裝置包括:開關、分檔調速器、連續調速器、互斥開關。
開關:包括0和1兩種狀態。
開關有兩個引腳,任意一個引腳都可以是輸入引腳(接往電源端),而另一個則是輸出引腳(接網接地端)。開關狀態為0時,無論輸入電位是多少,輸出引腳電位為0。當開關狀態為1時,輸出引腳電位等於輸入電位。
互斥開關:
互斥開關有3個引腳:1個是彙總引腳,另兩個是分支引腳。
開關電路示意圖如圖1所示,左邊是彙總引腳,編號為1;右邊兩個是分支引腳,右上的輸出引腳為2,右下輸出引腳為3。圖中1、2、3引腳均可以是輸入引腳,當1為輸入引腳時,2、3引腳為輸出引腳;1為輸出引腳時,2、3引腳為輸入引腳。
互斥開關只有兩種狀態:開關接往上面的2號引腳、接往下面的3號引腳。開關每次只能接通其中一個分支引腳,而另一個分支引腳處於斷開狀態。
互斥開關的預設狀態為1、2引腳接通,1、3引腳斷開。
圖1中所示的互斥開關可以反過來接入電路,即彙總引腳接往接地端,兩個分支引腳接往電源端。
image.png
圖1 互斥開關
為避免短路,互斥開關設定了限流電阻,12引腳之間預設電阻為5,13引腳之間預設電阻為10。
分檔調速器
按檔位調整,常見的有3檔、4檔、5檔調速器,檔位值從0檔-2(3/4)檔變化。本次迭代模擬4檔調速器,每個檔位的輸出電位分別為0、0.3、0.6、0.9倍的輸入電壓。
連續調速器
沒有固定檔位,按位置比例得到檔位引數,數值範圍在[0.00-1.00]之間,含兩位小數。輸出電位為檔位引數乘以輸入電壓。
所有調速器都有兩個引腳,一個固定的輸入(引腳編號為1)、一個輸出引腳(引腳編號為2)。當輸入電位為0時,輸出引腳輸出的電位固定為0,不受各類開關調節的影響。
開關、調速器的初始狀態/檔位為0。
調速器的輸入引腳編號為1,輸出引腳編號為2。
除互斥開關外,其他控制裝置的電阻為 0。
2、受控裝置
本題模擬的受控裝置包括:燈、風扇。兩種裝置都有兩根引腳,透過兩根引腳電壓的電壓差驅動裝置工作。
燈有兩種工作狀態:亮、滅。在亮的狀態下,有的燈會因引腳電位差的不同亮度會有區別。
風扇在接電後有兩種工作狀態:停止、轉動。風扇的轉速會因引腳間電位差的不同而有區別。
本次迭代模擬兩種燈具。
白熾燈:
亮度在0~200lux(流明)之間。
電位差為0-9V時亮度為0,其他電位差按比例,電位差10V對應50ux,220V對應200lux,其他電位差與對應亮度值成正比。白熾燈超過220V。
日光燈:
亮度為180lux。
只有兩種狀態,電位差為0時,亮度為0,電位差不為0,亮度為180。
本次迭代模擬兩種風扇。
吊扇:
工作電壓區間為80V-150V,對應轉速區間為80-360轉/分鐘。80V對應轉速為80轉/分鐘,150V對應轉速為360轉/分鐘,超過150V轉速為360轉/分鐘(本次迭代暫不考慮電壓超標的異常情況)。其他電壓值與轉速成正比,輸入輸出電位差小於80V時轉速為0。
落地扇:
工作電壓區間為 80V-150V,對應轉速區間為 80-360 轉/分鐘;[80V,100V) 對應轉速為 80 轉/分鐘;[100,120)V 對應轉速為 160 轉/分鐘;[120,140)V 對應轉速為 260 轉/分鐘;大於等於 140V 轉速 為 360 轉/分鐘(本次迭代暫不考慮電壓超標的異常情況)。
本次迭代模擬一種受控窗簾:
受控窗簾的電路符號為S,其最低工作電壓為50V,電壓達到或超過50V,窗簾即可正常工作,不考慮室外光照強度和室內空間大小等因素,窗簾受室內燈光的光照強度控制。
當電路中所有燈光的光照強度總和在[0,50)lux範圍內,窗簾全開;
在[50,100)lux範圍內,窗簾開啟比例為0.8;
在[100,200)lux範圍內,窗簾開啟比例為0.6;
在[200,300)lux範圍內,窗簾開啟比例為0.4;
在[300,400)lux範圍內,窗簾開啟比例為0.2;
在400lux及以上範圍內,窗簾關閉。
當電壓低於50V,窗簾不工作,預設為全開狀態。
如果電路中沒有燈或者燈全部關閉,光照強度為0,窗簾處於全開狀態。
受控裝置電阻:白熾燈的電阻為 10,日光燈的電阻為 5,吊扇的電阻為 20,落地扇的電阻為 20,窗簾電阻為15。
3、輸入資訊
1)輸入裝置資訊
分別用裝置識別符號K、F、L、B、R、D、A、H、S分別表示開關、分檔調速器、連續調速器、白熾燈、日光燈、吊扇、落地扇、互斥開關、受控窗簾。
裝置標識用識別符號+編號表示,如K1、F3、L2等。
引腳格式:裝置標識-引腳編號,例如:K1-1標識編號為1的開關的輸入引腳。
開關、分檔調速器、連續調速器的輸入引腳編號為1,輸出引腳編號為2。
受控裝置的兩個引腳編號分別為1、2。
互斥開關的引腳編號已經在互斥開關的介紹部分說明。
約束條件:
不同裝置的編號可以相同。
同種裝置的編號可以不連續。
裝置資訊不單獨輸入,包含在連線資訊中。
2)輸入連線資訊
一條連線資訊佔一行,用[]表示一組連線在一起的裝置引腳,引腳與引腳之間用英文空格" "分隔。
格式:"["+引腳號+" "+引腳號+"]"
例如:[K1-1 K3-2]表示K1的1引腳,K3的2引腳連線在一起。
約束條件:
不考慮調速器串聯到其他調速器的情況。
考慮各類裝置的並聯接入。例如,K1 的輸出接到 L2 的輸入,L2 的輸出再接其他裝置屬於串聯接線。K1 的輸出接到 L2 的輸出,同時 K1 的輸入接到 L2 的輸入,這種情況屬於並聯。
本次迭代的連線資訊不單獨輸入,包含線上路資訊中。
3)輸入控制裝置調節資訊
開關、互斥開關調節資訊格式:
#+裝置標識K+裝置編號,例如:#K2,代表切換K2開關的狀態。
#+裝置標識H+裝置編號,例如:#H2,代表切換H2互斥開關的狀態。
分檔調速器的調節資訊格式:
#+裝置標識F+裝置編號+"+" 代表加一檔,例如:#F3+,代表F3輸出加一檔。
#+裝置標識F+裝置編號+"-" 代表減一檔,例如:#F1-,代表F1輸出減一檔。
連續調速器的調節資訊格式:
#+裝置標識L+裝置編號+":" +數值 代表將連續調速器的檔位設定到對應數值,例如:#L3:0.6,代表L3輸出檔位引數0.6。
4)電源接地標識:
VCC,電壓220V,GND,電壓0V。沒有接線的引腳預設接地,電壓為0V。
5)輸入串聯電路資訊
一條串聯電路佔一行,串聯電路由按從靠電源端到接地端順序依次輸入的 n 個連線 資訊組成,連線資訊之間用英文空格" "分隔。
串聯電路資訊格式:
"#T"+電路編號+":"+連線資訊+" "+連線資訊+...+" "+連線資訊
例如:#T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT] 一個串聯電路的第一個引腳是 IN,代表起始端,靠電源。最後一個引腳是 OUT,代表結尾端, 靠接地。
約束條件:
不同的串聯電路資訊編號不同。
輸入的最後一條電路資訊必定是總電路資訊,總電路資訊的起始引腳是 VCC,結束引腳是 GND。
連線資訊中的引腳可能是一條串聯或並聯電路的 IN 或者 OUT。例如:
#T1:[IN K1-1] [K1-2 T2-IN] [T2-OUT OUT]
#T1:[IN K1-1] [K1-2 T2-IN] [T2-OUT M2-IN] [M2-OUT OUT]
6)輸入並聯電路資訊
一條並聯電路佔一行,並聯電路由其包含的幾條串聯電路組成,串聯電路標識之間用英文空格" "分隔。
格式:
"#M"+電路編號+":"+”[”+串聯電路資訊+" "+....+" "+串聯電路資訊+”]”
例如:#M1:[T1 T2 T3]
該例宣告瞭一個並聯電路,由 T1、T2、T3 三條串聯電路並聯而成,三條串聯電路的 IN 短 接在一起構成 M1 的 IN,三條串聯電路的 OUT 短接在一起構成 M1 的 OUT。
約束條件:
本次迭代不考慮並聯電路中包含並聯電路的情況。
本題不考慮輸入電壓或電壓差超過220V的情況。
輸入資訊以end為結束標誌,忽略end之後的輸入資訊。
本題中的並聯資訊所包含的串聯電路的資訊都在並聯資訊之前輸入,不考慮亂序輸入的情況。
只要不因短路而造成無窮大的電流燒壞電路(如電路中的部分短接),都是合理情況,在測試點的考慮範圍之內。會造成無窮大的電流的短路本次迭代不考慮。
本次迭代考慮多個並聯電路串聯在一起的情況。
本題考慮一條串聯電路中包含其他串聯電路的情況。例如:
#T3:[VCC K1-1] [K1-2 T2-IN] [T2-OUT K2-1] [K2-2 T1-IN] [T1-OUT GND]
本例中T1\T2兩條串聯電路T3的一個部分,本題考慮這種型別的輸入。
4、輸出資訊:
按開關、分檔調速器、連續調速器、白熾燈、日光燈、吊扇、互斥開關、受控窗簾的順序依次輸出所有裝置的狀態或引數。每個裝置一行。同類裝置按編號順序從小到大輸出。
輸出格式:
@裝置標識+裝置編號+":" +裝置引數值(控制開關的檔位或狀態、燈的亮度、風扇的轉速,只輸出值,不輸出單位)
連續調速器的檔位資訊保留兩位小數,即使小數為0,依然顯示兩位小數.00。
開關狀態為0(開啟)時顯示turned on,狀態為1(合上)時顯示closed
如:
@K1:turned on
@B1:190
@L1:0.60
互斥開關顯示1、2引腳的接通狀態,接通時顯示closed,斷開時顯示turned on。
如:
@H1:turned on
受控窗簾顯示窗簾開啟的百分比,如:
@S1:80%
5、家居電路模擬系列所有題目的預設規則:
1)當計算電壓值等數值的過程中,最終結果出現小數時,用截尾規則去掉小數部分,只保留整數部分。為避免精度的誤差,所有有可能出現小數的數值用double型別儲存並計算,不要作下轉型資料型別轉換,例如電壓、轉速、亮度等,只有在最後輸出時再把計算結果按截尾規則,捨棄尾數,保留整數輸出。
2)所有連線資訊按電路從電源到接地的順序依次輸入,不會出現錯位的情況。電源VCC一定是第一個連線的第一項,接地GND一定是最後一個連線的後一項。
3)連線資訊如果只包含兩個引腳,靠電源端的引腳在前,靠接地端的在後。
4)調速器的輸入端只會直連VCC,不會接其他裝置。整個電路最多隻有連線在電源上的一個調速器,且不包含在並聯單路中。
6、家居電路模擬系列1-4題目後續迭代設計:
1)電路結構變化:
迭代1:只有一條線路,所有元件串聯
迭代2:線路中包含一個並聯電路
迭代3:線路中包含多個串聯起來的並聯電路
迭代4:並聯電路之間可能出現包含關係
電路結構變化示意圖見圖1。
2)計算方式的變化
迭代1只包含1個受控元件,不用計算電流,之後的電路計算要包含電流、電阻等電路引數。
3)電路元件的變化
每次迭代會增加1-2個新的電路元件。
image.png
圖1:電路結構示意圖
設計建議:
1、電路裝置類:描述所有電路裝置的公共特徵。
2、受控裝置類、控制裝置類:對應受控、控制裝置
3、串聯電路類:一條由多個電路裝置構成的串聯電路,也看成是一個獨立的電路裝置
4、並聯電路類:繼承電路裝置類,也看成是一個獨立的電路裝置
其他類以及類的屬性、方法自行設計。
image.png
圖2:建議設計類圖
輸入樣例1:
在這裡給出一組輸入。例如:
#T1:[IN H1-1] [H1-2 D2-1] [D2-2 OUT]
#T2:[IN H1-1] [H1-3 D1-1] [D1-2 OUT]
#M1:[T1 T2]
#T4:[IN K3-1] [K3-2 B2-1] [B2-2 OUT]
#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]
#M2:[T4 T5]
#T3:[VCC K2-1] [K2-2 M1-IN] [M1-OUT M2-IN] [M2-OUT GND]
#K1
#K2
end
輸出樣例1:
在這裡給出相應的輸出。例如:
@K1:closed
@K2:closed
@K3:turned on
@B1:87
@B2:0
@D1:0
@D2:262
@H1:closed
輸入樣例2:
在這裡給出一組輸入。例如:
#T1:[IN D2-1] [D2-2 H1-2] [H1-1 OUT]
#T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]
#M1:[T1 T2]
#T4:[IN K3-1] [K3-2 B2-1] [B2-2 OUT]
#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]
#M2:[T4 T5]
#T3:[VCC K2-1] [K2-2 M1-IN] [M1-OUT M2-IN] [M2-OUT GND]
#K1
#K2
end
輸出樣例2:
在這裡給出相應的輸出。例如:
@K1:closed
@K2:closed
@K3:turned on
@B1:87
@B2:0
@D1:0
@D2:262
@H1:closed
輸入樣例3:
在這裡給出一組輸入。例如:
#T1:[IN K1-1] [K1-2 B2-1] [B2-2 OUT]
#T2:[IN K2-1] [K2-2 R1-1] [R1-2 OUT]
#M1:[T1 T2]
#T3:[VCC K3-1] [K3-2 M1-IN] [M1-OUT S1-1] [S1-2 GND]
#K1
#K2
#K3
end
輸出樣例3:
在這裡給出相應的輸出。例如:
@K1:closed
@K2:closed
@K3:closed
@B2:71
@R1:180
@S1:40%
輸入樣例4:
在這裡給出一組輸入。例如:
#T1:[IN K2-1] [K2-2 D2-1] [D2-2 OUT]
#T2:[IN K3-1] [K3-2 D1-1] [D1-2 OUT]
#T3:[VCC K1-1] [K1-2 T1-IN] [T1-OUT T2-IN] [T2-OUT GND]
#K1
#K2
#K3
end
輸出樣例4:
在這裡給出相應的輸出。例如:
@K1:closed
@K2:closed
@K3:closed
@D1:200
@D2:200
輸入樣例5:
在這裡給出一組輸入。例如:
#T3:[VCC B2-1] [B2-2 K1-1] [K1-2 S1-1] [S1-2 H1-1] [H1-2 GND]
#K1
end
輸出樣例5:
在這裡給出相應的輸出。例如:
@K1:closed
@B2:95
@H1:closed
@S1:80%
我的程式碼:
點選檢視程式碼
import java.util.*;
import java.io.FileNotFoundException;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Electric {// 主電器
public String s;// 型別
public String id;// 型別id
public double shuV = 220;// 電壓
public String ofopen = "turned on";// 開關K的狀態
public int speed = 0;//
public double lin = 0.00;//
public int resistance;// 電阻
public int lux;
public int xuhao;
public Electric(String s, String id) {
this.s = s;
this.id = id;
}
public void display() {
}
public void regulate(String vs) {
}
public void reshuV(double shuop) {
}
public int getL(){
return 0;
}
public int fanhui() {// 比較器用到的
if (s.equals("K"))
return 9;
else if (s.equals("F"))
return 8;
else if (s.equals("L"))
return 7;
else if (s.equals("B"))
return 6;
else if (s.equals("R"))
return 5;
else if (s.equals("D"))
return 4;
else if (s.equals("A"))
return 3;
else if (s.equals("H"))
return 2;
else if (s.equals("S"))
return 1;
else
return 0;
}
}
class Kaiguan extends Electric {// 開關
public Kaiguan(String id) {
super("K", id);
}
public void display() {
System.out.printf("@K%s:%s\n", id, ofopen);
}
public void regulate(String vs) {
}
public void reshuV(double shuop) {
if (ofopen.equals("turned on")) {
shuV = 0;
// System.out.println(shuV);
} else if (ofopen.equals("closed"))
shuV = shuop;
}
}
class Fendang extends Electric {// 分檔
public Fendang(String id) {
super("F", id);
}
public void display() {
System.out.printf("@F%s:%d\n", id, speed);
}
public void regulate(String vs) {// 分檔調節
if (vs.equals("+") && speed < 3) {
speed++;
} else if (vs.equals("-") && speed > 0) {
speed--;
}
}
public void reshuV(double shuop) {
shuV = speed * 0.3 * shuop;
}
}
class Lianxu extends Electric {// 連續
public Lianxu(String id) {
super("L", id);
}
public void display() {
String siop = String.format("@L%s:%.2f", id, lin);
System.out.printf("%s\n", siop);
}
public void regulate(String vs) {
lin = Double.parseDouble(vs);
}
public void reshuV(double shuop) {
shuV = lin * shuop;
}
}
class Baichi extends Electric {// 白熾燈
public Baichi(String id) {
super("B", id);
}
public void display() {
int a = 0;
if (shuV >= 0 && shuV <= 9) {
a = 0;
} else if (shuV >= 10 && shuV <= 219) {
a = (int) ((5 * shuV) / 7 + 43);
} else if (shuV == 220) {
a = 200;
}
System.out.printf("@B%s:%d\n", id, a);
}
public void reshuV(double shuop) {
shuV = shuop;
}
public int getL(){
int a = 0;
if (shuV >= 0 && shuV <= 9) {
a = 0;
} else if (shuV >= 10 && shuV <= 219) {
a = (int) ((5 * shuV) / 7 + 43);
} else if (shuV == 220) {
a = 200;
}
return a;
}
}
class Riguang extends Electric {// 日光燈
public Riguang(String id) {
super("R", id);
}
public void display() {
int a = 0;
if (shuV == 0)
a = 0;
else
a = 180;
System.out.printf("@R%s:%d\n", id, a);
}
public void reshuV(double shuop) {
shuV = shuop;
}
public int getL(){
int a = 0;
if (shuV == 0)
a = 0;
else
a = 180;
return a;
}
}
class Diaoshan extends Electric {// 吊扇
public Diaoshan(String id) {
super("D", id);
}
public void display() {
int a = 0;
if (shuV >= 0 && shuV < 80)
a = 0;
else if (shuV >= 80 && shuV <= 150)
a = (int) ((shuV - 80) * 4 + 80);
else if (shuV > 150)
a = 360;
System.out.printf("@D%s:%d\n", id, a);
}
public void reshuV(double shuop) {
shuV = shuop;
}
}
class Luodi extends Electric {// 落地扇
public Luodi(String id) {
super("A", id);
}
public void display() {
int a = 0;
if (shuV >= 0 && shuV < 80)
a = 0;
else if (shuV >= 80 && shuV <= 99)
a = 80;
else if (shuV >= 100 && shuV <= 119)
a = 160;
else if (shuV >= 120 && shuV <= 139)
a = 260;
else if (shuV > 140)
a = 360;
System.out.printf("@A%s:%d\n", id, a);
}
public void reshuV(double shuop) {
shuV = shuop;
}
}
class Huchi extends Electric{
public Huchi(String id,int d){
super("H", id);
this.xuhao=d;
}
public void display() {
System.out.printf("@H%s:%s\n", id, ofopen);
}
public void regulate(String vs) {
}
public void reshuV(double shuop) {
if (ofopen.equals("turned on")) {
shuV = 0;
} else if (ofopen.equals("closed"))
shuV = shuop;
}
}
class Shoukong extends Electric{//R=15
public Shoukong(String id) {
super("S", id);
}
public void display() {
String a = "100%";
if(shuV>=50){
if (lux >= 0 && lux < 50)
a = "100%";
else if (lux >= 50 && lux < 100)
a = "80%";
else if (lux >= 100 && lux < 200)
a = "60%";
else if (lux >= 200 && lux < 300)
a = "40%";
else if (lux >= 300 && lux <400)
a = "20%";
else if (lux >=400)
a = "0%";
System.out.printf("@S%s:%s\n", id, a);
}
else {
System.out.printf("@S%s:%s\n", id,a);
}
}
public void reshuV(double shuop) {
shuV = shuop;
}
}
class Bi extends Electric {
public Bi(String ml) {
super("M", ml);
}
}
class Chuan extends Electric{
public Chuan(String ml){
super("T",ml);
}
}
class Duobing{
public String s;
public ArrayList<Map<String, Electric>> map;
public double k[];
public Duobing(String s,ArrayList<Map<String, Electric>> map,double b[])
{
this.s=s;
this.map=map;
this.k=b;
}
}
public class Main {
public static void main(String[] args) throws FileNotFoundException {
Scanner in = new Scanner(System.in);
String s = "", pop = "", zong = "", chuanxu = "", bingxu = "";
int i;
ArrayList<String> connection = new ArrayList<>();
ArrayList<String> connection1 = new ArrayList<>();
ArrayList<String> chw = new ArrayList<>();
while (true) {
s = in.nextLine().trim();
if ("end".equals(s))
break;
if (s.startsWith("#T"))// 將每一條路線存進去
{
Pattern pattern = Pattern.compile("#(.*):(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
chuanxu = String.valueOf(matcher.group(1));
pop = String.valueOf(matcher.group(2));
}
connection.add(chuanxu + ":" + pop);
}
else if (s.startsWith("#M"))// 將並聯的電路放進去,後面進行判斷
{
Pattern pattern = Pattern.compile("#(.*):(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
bingxu = String.valueOf(matcher.group(1));
pop = String.valueOf(matcher.group(2));
}
connection1.add(bingxu + " " + pop);
}
else if (s.startsWith("#K"))// 對開關進行儲存後面進行更改
{
Pattern pattern = Pattern.compile("#(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
pop = String.valueOf(matcher.group(1));
}
chw.add(pop);
}
else if (s.startsWith("#F")) {
Pattern pattern = Pattern.compile("#(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
pop = String.valueOf(matcher.group(1));
}
chw.add(pop);
}
else if (s.startsWith("#L")) {
Pattern pattern = Pattern.compile("#(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
pop = String.valueOf(matcher.group(1));
}
chw.add(pop);
}
else if(s.startsWith("#H")){
Pattern pattern = Pattern.compile("#(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
pop = String.valueOf(matcher.group(1));
}
chw.add(pop);
}
}
int kllk = 0, mmm = 0;
String z1 = "", zm = "";
String bnb="";
Map<String, Map<String, Electric>> mac = new HashMap<>();
Map<String, Electric> zhu = new LinkedHashMap<>();
Map<String, Electric> map4 = new HashMap<>();
for (mmm = 0; mmm < connection.size(); mmm++) {// 將並聯的與串聯的電路分開儲存
int vb1 = 0, vb2 = 0;
Map<String, Electric> map1 = new LinkedHashMap<>();
z1 = connection.get(mmm);
Pattern pattern = Pattern.compile("(.*):(.*)");
Matcher matcher = pattern.matcher(z1);
while (matcher.find()) {
zm = String.valueOf(matcher.group(1));
pop = String.valueOf(matcher.group(2));
}
//System.out.println(zm);
String[] partsl = pop.split("]");
String jk = "", jk1 = "";
for (kllk = 0; kllk < partsl.length; kllk++) {
jk1 = partsl[0].trim();
jk = partsl[kllk].trim();
//System.out.println(jk);
if (jk1.startsWith("[IN")) {
vb1 = 1;
String[] parts4 = jk.split(" ");
//System.out.println(parts4[0]);
if(parts4[1].equals("OUT")){
if(parts4[0].startsWith("[H")) {
String[] pinyin = parts4[0].split("-");
String dkey="";
pattern = Pattern.compile("\\[(.*)");
matcher = pattern.matcher(pinyin[0]);
while (matcher.find()) {
dkey = String.valueOf(matcher.group(1));
}
if (dkey.startsWith("H")) {
int m1 = Integer.parseInt(pinyin[1]);
if ((m1 == 2 || m1 == 3) && parts4[0] != null) {
bnb = parts4[0].substring(1, 3);
map1 = compose(dkey, bnb, map1, m1);
}
}
break;
}
else {
break;
}
}
if(parts4[0].startsWith("[H")){
String[] pinyin = parts4[0].split("-");
String dkey="";
pattern = Pattern.compile("\\[(.*)");
matcher = pattern.matcher(pinyin[0]);
while (matcher.find()) {
dkey = String.valueOf(matcher.group(1));
}
if(dkey.startsWith("H")) {
int m1=Integer.parseInt(pinyin[1]);
if((m1==2||m1==3)&&parts4[0]!=null){
//System.out.println(parts4[0]);
bnb=parts4[0].substring(1,3);
map1 = compose(dkey, bnb, map1,m1);
}
}
if(parts4[1].equals("OUT"))
break;
String[] pinyin1 = parts4[1].split("-");
dkey = pinyin1[0].trim();
if(dkey.startsWith("H")){
int m1=Integer.parseInt(pinyin1[1]);
if(m1==2||m1==3){
map1 = compose(dkey, parts4[1], map1,m1);
}
}
else{
map1 = complain(dkey, parts4[1], map1,1);
}
}
else {
String[] pinyin = parts4[1].split("-");
//System.out.println(parts4[1]);
String dkey = pinyin[0].trim();
if(dkey.startsWith("H")){
int m1=Integer.parseInt(pinyin[1]);
if(m1==2||m1==3){
map1 = compose(dkey, parts4[1], map1,m1);
}
}
else{
map1 = complain(dkey, parts4[1], map1,1);
}
}
}
else if (jk1.startsWith("[VCC")) {
//System.out.println(1);
vb2 = 1;
String[] parts4 = jk.split(" ");
if(parts4[1].equals("GND")){
if(parts4[0].startsWith("[H")) {
String[] pinyin = parts4[0].split("-");
String dkey="";
pattern = Pattern.compile("\\[(.*)");
matcher = pattern.matcher(pinyin[0].trim());
while (matcher.find()) {
dkey = String.valueOf(matcher.group(1));
}
if (dkey.startsWith("H")) {
int m1 = Integer.parseInt(pinyin[1]);
if ((m1 == 2 || m1 == 3) && parts4[0] != null) {
bnb = parts4[0].substring(1, 3);
map1 = compose(dkey, bnb, map1, m1);
}
}
break;
}
else {
break;
}
}
if(parts4[0].startsWith("[H")){
String[] pinyin = parts4[0].split("-");
String dkey="";
pattern = Pattern.compile("\\[(.*)");
matcher = pattern.matcher(pinyin[0].trim());
while (matcher.find()) {
dkey = String.valueOf(matcher.group(1));
}
if(dkey.startsWith("H")) {
int m1=Integer.parseInt(pinyin[1]);
//System.out.println(dkey+" "+ parts4[0]);
if((m1==2||m1==3)&&parts4[0]!=null){
bnb=parts4[0].substring(1,3);
map1 = compose(dkey, bnb, map1,m1);
}
}
if(parts4[1].equals("GND"))
break;
String[] pinyin1 = parts4[1].split("-");
dkey = pinyin1[0].trim();
if(dkey.startsWith("H")){
int m1=Integer.parseInt(pinyin1[1]);
if(m1==2||m1==3){
map1 = compose(dkey, parts4[1], map1,m1);
}
}
else{
map1 = complain(dkey, parts4[1], map1,1);
}
}
else {
String[] pinyin = parts4[1].split("-");
//System.out.println(parts4[1]);
String dkey = pinyin[0].trim();
if(dkey.startsWith("H")){
int m1=Integer.parseInt(pinyin[1]);
if(m1==2||m1==3){
map1 = compose(dkey, parts4[1], map1,m1);
}
}
else{
map1 = complain(dkey, parts4[1], map1,1);
}
}
}
}
if (vb1 == 1){
mac.put(zm, map1);// 並聯電路以及其他電路
//System.out.println(mac.size());
}
if (vb2 == 1) {
zhu = map1;// 主電路
}
}
//System.out.println(zhu.size());
int flag = 0;
int flag2 = 0;
int lll = 0;
double rui = 220.0000000001;
for (i = 0; i < chw.size(); i++) {
String sid = chw.get(i);
for (Entry<String, Map<String, Electric>> entry : mac.entrySet()){
if (sid.startsWith("K")) {
String diu = sid.trim();
Electric electric = entry.getValue().get(diu);
if (electric != null) {
if (electric.ofopen.equals("turned on"))
electric.ofopen = "closed";
else
electric.ofopen = "turned on";
break;
}
}
else if (sid.startsWith("F")) {
String diu="";
String vs="";
Pattern pattern = Pattern.compile("(.*)(.)");
Matcher matcher = pattern.matcher(sid);
while (matcher.find()) {
diu = String.valueOf(matcher.group(1));
vs = String.valueOf(matcher.group(2));
}
Electric electric = entry.getValue().get(diu);
if (electric != null) {
electric.regulate(vs);
flag2++;
if (vs.equals("+")) {
flag++;
if (flag >= 3) {
flag = 3;
}
}
if (vs.equals("-")) {
flag--;
if (flag <= 0) {
flag = 0;
}
}
break;
}
}
else if (sid.startsWith("L")) {
String diu = sid.substring(0, 2);
String vs = sid.substring(3);
Electric electric = entry.getValue().get(diu);
if (electric != null) {
electric.regulate(vs);
break;
}
}
else if(sid.startsWith("H")){
String diu = sid.trim();
int n1=0;
int n2=0;
for (Entry<String, Map<String, Electric>> try1 : mac.entrySet()){
Electric electric = try1.getValue().get(diu+2);
if (electric != null) {
n1=1;
if (electric.ofopen.equals("turned on"))
electric.ofopen = "closed";
else
electric.ofopen = "turned on";
//System.out.println(electric.ofopen+" "+electric.xuhao);
break;
}
}
for (Entry<String, Map<String, Electric>> try1 : mac.entrySet()){
Electric electric1 = try1.getValue().get(diu+3);
if (electric1 != null) {
n2=1;
if (electric1.ofopen.equals("turned on"))
electric1.ofopen = "closed";
else
electric1.ofopen = "turned on";
//System.out.println(electric1.ofopen+" "+electric1.xuhao);
break;
}
}
if(n1==1||n2==1)
break;
}
}
for (Entry<String, Electric> entry : zhu.entrySet()) {
if (sid.startsWith("K")) {
String diu = sid.trim();
Electric electric = zhu.get(diu);
if (electric != null) {
if (electric.ofopen.equals("turned on"))
electric.ofopen = "closed";
else
electric.ofopen = "turned on";
break;
}
}
else if (sid.startsWith("H")) {
String diu = sid.trim();
int n1=0;
int n2=0;
for (Entry<String, Electric> try1 : zhu.entrySet()){
Electric electric = zhu.get(diu+2);
if (electric != null) {
n1=1;
if (electric.ofopen.equals("turned on"))
electric.ofopen = "closed";
else
electric.ofopen = "turned on";
break;
}
}
for (Entry<String, Electric> try1 : zhu.entrySet()){
Electric electric1 = zhu.get(diu+3);
if (electric1 != null) {
n2=1;
if (electric1.ofopen.equals("turned on"))
electric1.ofopen = "closed";
else
electric1.ofopen = "turned on";
break;
}
}
if(n1==1||n2==1)
break;
}
else if (sid.startsWith("F")) {
String diu="";
String vs="";
Pattern pattern = Pattern.compile("(.*)(.)");
Matcher matcher = pattern.matcher(sid);
while (matcher.find()) {
diu = String.valueOf(matcher.group(1));
vs = String.valueOf(matcher.group(2));
}
Electric electric = zhu.get(diu);
if (electric != null) {
electric.regulate(vs);
flag2++;
break;
}
}
else if (sid.startsWith("L")) {
String diu = sid.substring(0, 2);
String vs = sid.substring(3);
Electric electric = zhu.get(diu);
if (electric != null) {
electric.regulate(vs);
break;
}
}
}
}
Map<String,ArrayList<Map<String, Electric>>> vjk=new LinkedHashMap<>();
Map<String, Map<String, Electric>> maps = new HashMap<>();
for (mmm = 0; mmm < connection1.size(); mmm++) {// 判斷那些事並聯電路並儲存
String k11 = connection1.get(mmm).substring(0, 2);
Pattern pattern = Pattern.compile("(.*)\\s\\[(.*)]");
Matcher matcher = pattern.matcher(connection1.get(mmm));
while (matcher.find()) {
pop = String.valueOf(matcher.group(2));
}
String[] partsl = pop.split(" ");
ArrayList<Map<String, Electric>> uzi=new ArrayList<>();
for (int yq = 0; yq < partsl.length; yq++) {
for (Entry<String, Map<String, Electric>> entry1 : mac.entrySet()) {
if (entry1.getKey().equals(partsl[yq])) {
maps.put(k11 + "" + yq, entry1.getValue());
uzi.add(entry1.getValue());
//System.out.println(uzi.size());
}
}
vjk.put(k11,uzi);
}
}
//System.out.println(vjk.size());
double siop = rui;
double a[] = new double[vjk.size()];// 算電阻//vjk是並聯電路所對應的路的List
double b[] = new double[1];
i = 0;
int sum1,sum2,sum3;
sum2=0;
int s1=0,mv=0;
double chuanR=0, bingR=0;
int zonglux=0;
int cw=0,cw1=0;
ArrayList<Duobing> duobing=new ArrayList<>();
for(Entry<String,ArrayList<Map<String, Electric>>> entry : vjk.entrySet()) {
double[] c= new double[entry.getValue().size()];
i = 0;
cw=0;
for (sum1 = 0; sum1 < entry.getValue().size(); sum1++) {
for (Entry<String, Electric> entry1 : entry.getValue().get(sum1).entrySet()) {
int hjh = 0;
flag = 0;
if (entry1.getKey().startsWith("K")) {
if (entry1.getValue().ofopen.equals("turned on"))
flag = 1;
if (entry1.getValue().ofopen.equals("closed"))
hjh++;
}
if (entry1.getKey().startsWith("H")) {
if (entry1.getValue().ofopen.equals("turned on")){
flag = 1;
//System.out.println(entry1.getValue().xuhao);
}
if (entry1.getValue().ofopen.equals("closed")) {
hjh++;
//System.out.println(entry1.getValue().xuhao);
}
}
if(entry1.getKey().startsWith("T")){
cw=0;
for(Entry<String, Map<String, Electric>> en6 : mac.entrySet()) {
if (en6.getKey().equals(entry1.getKey())) {
for(Entry<String, Electric> e : en6.getValue().entrySet()){
cw++;
if (e.getKey().startsWith("K")) {
if (e.getValue().ofopen.equals("turned on"))
flag = 1;
if (e.getValue().ofopen.equals("closed"))
hjh++;
}
if (e.getKey().startsWith("H")) {
if (e.getValue().ofopen.equals("turned on")){
flag = 1;
//System.out.println(entry1.getValue().xuhao);
}
if (e.getValue().ofopen.equals("closed")) {
hjh++;
//System.out.println(entry1.getValue().xuhao);
}
}
c[i] = c[i] + 1.0 * e.getValue().resistance;
}
cw1=cw+cw1;
}
}
}
if (hjh == entry.getValue().size()+cw1) {
c[i] = 0;//說明短路
break;
}
if (flag == 1)//說明斷路
{
c[i] = -1;
break;
}
else {
c[i] = c[i] + 1.0 * entry1.getValue().resistance;
}
}
i++;
}
duobing.add(new Duobing(entry.getKey(), entry.getValue(), c));
s1=0;
for (i = 0; i < c.length; i++) {
if (c[i] == 0) {
a[sum2] = 0;//短路
break;
}
else {
if (c[i] == -1){
s1++;
if(s1==c.length){
mv=1;
}
continue;
}
else {
a[sum2] = 1.0 / c[i] + a[sum2];
//System.out.println(a[sum2]);
}
}
}
sum2++;
}
for(sum3=0;sum3<a.length;sum3++){
if (a[sum3] == 0)
continue;
else{
bingR = bingR+1.0/a[sum3];
}
}
//System.out.println(bingR);
b[0]=0;
double l[]=new double[1];
int flag4 = 0;
int f1=0;
for (Entry<String, Electric> entry : zhu.entrySet()) {
flag=0;
if (entry.getKey().startsWith("K")) {
flag=0;
if (entry.getValue().ofopen.equals("turned on")){
flag = 1;
}
if(flag==1){
b[0] = -1;
break;
}
}
else if (entry.getKey().startsWith("H")) {
flag=0;
if (entry.getValue().ofopen.equals("turned on")){
flag = 1;
}
if(flag==1){
b[0] = -1;
break;
}
}
else if(entry.getKey().startsWith("T")){
l[0]=0;
for(Entry<String, Map<String, Electric>> entry6 : mac.entrySet()) {
if(entry6.getKey().equals(entry.getKey())) {
for(Entry<String, Electric> en : entry6.getValue().entrySet()) {
if (en.getKey().startsWith("K")) {
flag4=0;
if (en.getValue().ofopen.equals("turned on")) {
flag4 = 1;
}
if (flag4 == 1) {
l[0] = -1;
break;
}
}
else if(en.getKey().startsWith("H")){
flag4=0;
if (en.getValue().ofopen.equals("turned on")) {
flag4 = 1;
}
if (flag4 == 1) {
l[0] = -1;
break;
}
else
l[0]=l[0]+en.getValue().resistance;
}
else
l[0]=l[0]+en.getValue().resistance;
}
break;
}
}
if(l[0]==-1){
b[0]=-1;
break;
}
else{
b[0]=b[0]+l[0];
}
}
b[0] = b[0] + entry.getValue().resistance;
}
chuanR = b[0];
//System.out.println(chuanR+" "+bingR);
double chuanV = 0, bingV = 0;
chuanV = rui * chuanR / (bingR + chuanR);
bingV = rui * bingR / (bingR + chuanR);
zonglux=0;
Map<String, Electric> maso = new HashMap<>();
for (Entry<String, Electric> entry : zhu.entrySet()) {
String parts8 = entry.getKey();
s = parts8;
if(b[0]==-1||flag4==1||flag==1||mv==1){
siop=0;
rui=0;
chuanV=0;
bingV=0;
}
if (s.startsWith("K")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(rui);
rui = elc1.shuV;
chuanV = 1.0*rui * chuanR / (bingR + chuanR);
bingV = 1.0*rui * bingR / (bingR + chuanR);
maso.put(s, elc1);
}
else if (s.startsWith("H")) {
Electric elc1 = zhu.get(parts8);
if(elc1.xuhao ==3){
if(elc1.ofopen.startsWith("t")){
elc1.ofopen="closed";
}
else{
elc1.ofopen="turned on";
}
}
maso.put(s, elc1);
}
else if (s.startsWith("B")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(10*chuanV/chuanR);
zonglux=zonglux+elc1.getL();
//System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("R")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(5*chuanV/chuanR);
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("D")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(20*chuanV/chuanR);
maso.put(s, elc1);
}
else if (s.startsWith("A")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(20*chuanV/chuanR);
maso.put(s, elc1);
}
else if (s.startsWith("L")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(rui);
rui = elc1.shuV;
chuanV = rui * chuanR / (bingR + chuanR);
bingV = rui * bingR / (bingR + chuanR);
//System.out.println(bingR);
maso.put(s, elc1);
}
else if (s.startsWith("F")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(rui);
rui=elc1.shuV;
chuanV = rui * chuanR / (bingR + chuanR);
bingV = rui * bingR / (bingR + chuanR);
maso.put(s, elc1);
}
else if (s.startsWith("S")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(15*chuanV/chuanR);
maso.put(s, elc1);
}
else if(s.startsWith("T")) {
//System.out.println("1");
for(Entry<String, Map<String, Electric>> entry6 : mac.entrySet()) {
if(entry6.getKey().equals(s)){
//System.out.println(chuanR);
for(Entry<String,Electric> jk : entry6.getValue().entrySet()) {
s=jk.getKey();
if (s.startsWith("K")) {
Electric elc1 = entry6.getValue().get(s);
maso.put(s, elc1);
}
else if(s.startsWith("H")) {
Electric elc1 = entry6.getValue().get(s);
if(elc1.xuhao ==3){
if(elc1.ofopen.startsWith("t")){
elc1.ofopen="closed";
}
else{
elc1.ofopen="turned on";
}
}
maso.put(s, elc1);
}
else if (s.startsWith("B")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(10 * chuanV / chuanR);
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("R")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(5 * chuanV / chuanR);
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("D")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(20 * chuanV / chuanR);
maso.put(s, elc1);
//System.out.println(elc1.shuV);
}
else if (s.startsWith("A")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(20 * chuanV / chuanR);
maso.put(s, elc1);
}
else if (s.startsWith("S")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(15 * chuanV / chuanR);
maso.put(s, elc1);
}
}
}
}
}
else if (s.startsWith("M")) {
for(int cmd=0;cmd<duobing.size();cmd++){
if(duobing.get(cmd)==null)continue;
Duobing d1=duobing.get(cmd); //public ArrayList<Map<String, Electric>> map;
if(d1.s.equals(s)){
for(int kkkk=0;kkkk<d1.map.size();kkkk++){
if(d1.map.get(kkkk)==null)continue;
siop=bingV*(1/a[cmd])/bingR;
if(a[cmd]==0){
siop=0;
for(Entry<String,Electric>c1:d1.map.get(kkkk).entrySet()){
parts8 = c1.getKey();
s = parts8;
if (s.startsWith("K")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
if (elc1.ofopen.startsWith("t")) {
siop = 0;
}
maso.put(s, elc1);
}
else if (s.startsWith("H")) {
int yy=0;
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
if (elc1.ofopen.startsWith("t")) {
siop = 0;
}
if(elc1.xuhao==2){
maso.put(s, elc1);
}
else if(elc1.xuhao==3){
String jkj="";
Pattern pattern = Pattern.compile("(.*).");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
jkj = String.valueOf(matcher.group(1));
}
for(int d=0;d<d1.map.size();d++) {
for (Entry<String, Electric> c2 : d1.map.get(d).entrySet()) {
Electric elc2 = d1.map.get(d).get(jkj+2);
if(elc2!=null)
yy=1;
}
}
if(yy==0){
if(elc1.ofopen.startsWith("t"))
elc1.ofopen="closed";
else
elc1.ofopen="turned on";
maso.put(s, elc1);
}
}
}
else if (s.startsWith("B")) {
//System.out.println(10*siop/a[i]);
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
// System.out.println(elc1.shuV);
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("R")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("D")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
//System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("A")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
maso.put(s, elc1);
}
else if (s.startsWith("S")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
maso.put(s, elc1);
}
}
}
if(d1.k[kkkk]!=-1&&d1.k[kkkk]!=0) {
for (Entry<String, Electric> c1 : d1.map.get(kkkk).entrySet()) {
parts8 = c1.getKey();
s = parts8;
//System.out.printf(s);
if (s.startsWith("K")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
if (elc1.ofopen.startsWith("t")) {
siop = 0;
}
maso.put(s, elc1);
}
else if (s.startsWith("H")) {
int yy=0;
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
if (elc1.ofopen.startsWith("t")) {
siop = 0;
}
if(elc1.xuhao==2){
maso.put(s, elc1);
}
else if(elc1.xuhao==3){
String jkj="";
Pattern pattern = Pattern.compile("(.*).");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
jkj = String.valueOf(matcher.group(1));
}
for(int d=0;d<d1.map.size();d++) {
for (Entry<String, Electric> c2 : d1.map.get(d).entrySet()) {
Electric elc2 = d1.map.get(d).get(jkj+2);
if(elc2!=null)
yy=1;
}
}
if(yy==0){
if(elc1.ofopen.startsWith("t"))
elc1.ofopen="closed";
else
elc1.ofopen="turned on";
maso.put(s, elc1);
}
}
}
else if (s.startsWith("B")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(10 * siop/ d1.k[kkkk]);
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("R")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(5 * siop/ d1.k[kkkk]);
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("D")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(20 * siop/ d1.k[kkkk]);
maso.put(s, elc1);
}
else if (s.startsWith("A")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(20 * siop/ d1.k[kkkk]);
maso.put(s, elc1);
}
else if (s.startsWith("S")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(15 * siop/ d1.k[kkkk]);
maso.put(s, elc1);
}
}
}
else {
siop=0;
for (Entry<String, Electric> c1 : d1.map.get(kkkk).entrySet()) {
parts8 = c1.getKey();
s = parts8;
//System.out.println(s);
if (s.startsWith("K")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.shuV=0;
maso.put(s, elc1);
}
else if (s.startsWith("H")) {
int yy=0;
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
if (elc1.ofopen.startsWith("t")) {
siop = 0;
}
if(elc1.xuhao==2){
maso.put(s, elc1);
}
else if(elc1.xuhao==3){
String jkj="";
Pattern pattern = Pattern.compile("(.*).");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
jkj = String.valueOf(matcher.group(1));
}
for(int d=0;d<d1.map.size();d++) {
for (Entry<String, Electric> c2 : d1.map.get(d).entrySet()) {
Electric elc2 = d1.map.get(d).get(jkj+2);
if(elc2!=null)
yy=1;
}
}
if(yy==0){
if(elc1.ofopen.startsWith("t"))
elc1.ofopen="closed";
else
elc1.ofopen="turned on";
maso.put(s, elc1);
}
}
}
else if (s.startsWith("B")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
// System.out.println(elc1.shuV);
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("R")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("D")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
//System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("A")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
//System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("S")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
maso.put(s, elc1);
}
}
}
}
}
}
}
}
ArrayList<Electric> arraylist6 = new ArrayList<>();
for (Entry<String, Electric> pose : maso.entrySet()) {
if(pose.getValue()==null)continue;
arraylist6.add(pose.getValue());
}
//System.out.println("1");
Comparator<Electric> numberComparator = new Comparator<Electric>() {
public int compare(Electric o1, Electric o2) {
int a = o1.fanhui();
int b = o2.fanhui();
if (a > b)
return -1;
else if (a == b) {
String c = o1.id;
String d = o2.id;
if (c.compareTo(d)>0)
return 1;
else
return -1;
} else
return 1;
}
};
Collections.sort(arraylist6, numberComparator);
for (Electric suixcs : arraylist6) {
if(suixcs.s.equals("S")){
suixcs.lux=zonglux;
}
suixcs.display();
}
}
public static Map<String, Electric> complain(String dkey, String s, Map<String, Electric> map1,int a) {
String jkj="";
Pattern pattern = Pattern.compile(".(.*)");
Matcher matcher = pattern.matcher(dkey);
while (matcher.find()) {
jkj = String.valueOf(matcher.group(1));
}
//System.out.println(dkey);
//System.out.println(s+" "+jkj);
if (s.startsWith("K")) {
Electric tric = new Kaiguan(jkj);
tric.resistance = 0;
tric.lux=0;
map1.put(dkey, tric);
}
else if (s.startsWith("F")) {
Electric tric = new Fendang(jkj);
tric.resistance = 0;
tric.lux=0;
map1.put(dkey, tric);
}
else if (s.startsWith("L")) {
Electric tric = new Lianxu(jkj);
tric.resistance = 0;
tric.lux=0;
map1.put(dkey, tric);
}
else if (s.startsWith("B")) {
Electric tric = new Baichi(jkj);
tric.resistance = 10;
map1.put(dkey, tric);
} else if (s.startsWith("R")) {
Electric tric = new Riguang(jkj);
tric.resistance = 5;
map1.put(dkey, tric);
} else if (s.startsWith("D")) {
Electric tric = new Diaoshan(jkj);
tric.resistance = 20;
map1.put(dkey, tric);
}
else if (s.startsWith("A")) {
Electric tric = new Luodi(jkj);
tric.resistance = 20;
map1.put(dkey, tric);
}
else if (s.startsWith("M")) {
Electric tric = new Bi(jkj);
tric.resistance = 0;
map1.put(dkey,tric);
}
else if (s.startsWith("T")) {
Electric tric = new Chuan(jkj);
tric.resistance = 0;
map1.put(dkey,tric);
}
else if (s.startsWith("H")) {
//System.out.println(a);
Electric tric = new Huchi(jkj,a);
tric.xuhao=a;
if(a==2) {
tric.resistance = 5;
tric.ofopen="closed";
}
if(a==3){
tric.resistance = 10;
tric.ofopen="turned on";
}
map1.put(dkey,tric);
}
else if (s.startsWith("S")) {
Electric tric = new Shoukong(jkj);
tric.resistance = 15;
tric.xuhao=2;
map1.put(dkey,tric);
}
return map1;
}
public static Map<String, Electric> compose(String dkey, String s, Map<String, Electric> map1, int m) {
//System.out.println(s);
String jkj="";
Pattern pattern = Pattern.compile(".(.*)");
Matcher matcher = pattern.matcher(dkey);
while (matcher.find()) {
jkj = String.valueOf(matcher.group(1));
}
if (s.startsWith("H")) {
Electric tric = new Huchi(jkj,m);
tric.resistance = 0;
tric.xuhao=m;
if(m==2) {
tric.resistance = 5;
tric.ofopen="closed";
}
if(m==3){
tric.resistance = 10;
tric.ofopen="turned on";
}
//System.out.println(tric.xuhao);
map1.put(dkey+m,tric);
}
return map1;
}
}
總結:
這次作業主要考慮的是互斥開關,重點也是這個,窗簾則沒有什麼難度,主要考慮互斥開關的兩個端點的狀態,在輸出的時候要輸出2的狀態,在電路中只有三的時候,要將其轉換為2。這次有三分沒有拿到,但是在寫最後一次題目的時候,突然想起來了,因為精度的問題,改了一個值,導致最後輸出的時候有一個地方導致輸出結果錯誤,在最後一次作業中也看到了相應的問題,最後在最後的作業中解決了這一問題。
(2)第八次大作業
點選檢視題目
7-1 家居強電電路模擬程式-4
分數 100
作者 蔡軻
單位 南昌航空大學
智慧家居是在當下家庭中越來越流行的一種配置方案,它透過物聯網技術將家中的各種裝置(如音影片裝置、照明系統、窗簾控制、空調控制、安防系統、數字影院系統、影音伺服器、影櫃系統、網路家電等)連線到一起,提供家電控制、照明控制、電話遠端控制、室內外遙控、防盜報警、環境監測、暖通控制、紅外轉發以及可程式設計定時控制等多種功能和手段。與普通家居相比,智慧家居不僅具有傳統的居住功能,兼備建築、網路通訊、資訊家電、裝置自動化,提供全方位的資訊互動功能。請根據如下要去設計一個智慧家居強電電路模擬系統。以下題目介紹中加粗的部分為本次迭代在“家居強電電路模擬程式-3”的基礎上增加的功能要求。
1、控制裝置
本題模擬的控制裝置包括:開關、分檔調速器、連續調速器、互斥開關。
開關:包括0和1兩種狀態。
開關有兩個引腳,任意一個引腳都可以是輸入引腳(接往電源端),而另一個則是輸出引腳(接網接地端)。開關狀態為0時,無論輸入電位是多少,輸出引腳電位為0。當開關狀態為1時,輸出引腳電位等於輸入電位。
互斥開關:
互斥開關有3個引腳:1個是彙總引腳,另兩個是分支引腳。
開關電路示意圖如圖1所示,左邊是彙總引腳,編號為1;右邊兩個是分支引腳,右上的輸出引腳為2,右下輸出引腳為3。圖中1、2、3引腳均可以是輸入引腳,當1為輸入引腳時,2、3引腳為輸出引腳;1為輸出引腳時,2、3引腳為輸入引腳。
互斥開關只有兩種狀態:開關接往上面的2號引腳、接往下面的3號引腳。開關每次只能接通其中一個分支引腳,而另一個分支引腳處於斷開狀態。
互斥開關的預設狀態為1、2引腳接通,1、3引腳斷開。
圖1中所示的互斥開關可以反過來接入電路,即彙總引腳接往接地端,兩個分支引腳接往電源端。
image.png
圖1 互斥開關
為避免短路,互斥開關設定了限流電阻,1、2引腳之間預設電阻為5,1、3引腳之間預設電阻為10。
分檔調速器
按檔位調整,常見的有3檔、4檔、5檔調速器,檔位值從0檔-2(3/4)檔變化。本次迭代模擬4檔調速器,每個檔位的輸出電位分別為0、0.3、0.6、0.9倍的輸入電壓。
連續調速器
沒有固定檔位,按位置比例得到檔位引數,數值範圍在[0.00-1.00]之間,含兩位小數。輸出電位為檔位引數乘以輸入電壓。
所有調速器都有兩個引腳,一個固定的輸入(引腳編號為1)、一個輸出引腳(引腳編號為2)。當輸入電位為0時,輸出引腳輸出的電位固定為0,不受各類開關調節的影響。
開關、調速器的初始狀態/檔位為0。
開關的兩個引腳編號為1、2。
除互斥開關外,其他控制裝置的電阻為 0。
2、受控裝置
本題模擬的受控裝置包括:燈、風扇。兩種裝置都有兩根引腳,透過兩根引腳電壓的電壓差驅動裝置工作。
燈有兩種工作狀態:亮、滅。在亮的狀態下,有的燈會因引腳電位差的不同亮度會有區別。
風扇在接電後有兩種工作狀態:停止、轉動。風扇的轉速會因引腳間電位差的不同而有區別。
本次迭代模擬兩種燈具。
白熾燈:
亮度在0~200lux(流明)之間。
電位差為0-9V時亮度為0,其他電位差按比例,電位差10V對應50ux,220V對應200lux,其他電位差與對應亮度值成正比。白熾燈超過220V。
日光燈:
亮度為180lux。
只有兩種狀態,電位差為0時,亮度為0,電位差不為0,亮度為180。
本次迭代模擬兩種風扇。
吊扇:
工作電壓區間為80V-150V,對應轉速區間為80-360轉/分鐘。80V對應轉速為80轉/分鐘,150V對應轉速為360轉/分鐘,超過150V轉速為360轉/分鐘(本次迭代暫不考慮電壓超標的異常情況)。其他電壓值與轉速成正比,輸入輸出電位差小於80V時轉速為0。
落地扇:
工作電壓區間為 80V-150V,對應轉速區間為 80-360 轉/分鐘;[80V,100V) 對應轉速為 80 轉/分鐘;[100,120)V 對應轉速為 160 轉/分鐘;[120,140)V 對應轉速為 260 轉/分鐘;大於等於 140V 轉速 為 360 轉/分鐘(本次迭代暫不考慮電壓超標的異常情況)。
本次迭代模擬一種受控窗簾:
受控串聯的電路符號為S,其最低工作電壓為50V,電壓達到或超過50V,窗簾即可正常工作,不考慮室外光照強度和室內空間大小等因素,窗簾受室內燈光的光照強度控制。
當電路中所有燈光的光照強度總和在[0,50)lux範圍內,窗簾全開;
在[50,100)lux範圍內,窗簾開啟比例為0.8;
在[100,200)lux範圍內,窗簾開啟比例為0.6;
在[200,300)lux範圍內,窗簾開啟比例為0.4;
在[300,400)lux範圍內,窗簾開啟比例為0.2;
在400lux及以上範圍內,窗簾關閉。
窗簾預設為關閉狀態。
受控裝置電阻:白熾燈的電阻為 10,日光燈的電阻為 5,吊扇的電阻為 20,落地扇的電阻為 20,窗簾電阻為15。
3、輸入資訊
1)輸入裝置資訊
分別用裝置識別符號K、F、L、B、R、D、A、H、S、P分別表示開關、分檔調速器、連續調速器、白熾燈、日光燈、吊扇、落地扇、互斥開關、受控窗簾、二極體(見第6部分說明)。
裝置標識用識別符號+編號表示,如K1、F3、L2等。
引腳格式:
裝置標識-引腳編號,例如:K1-1標識編號為1的開關的1號引腳。
開關、分檔調速器、連續調速器的兩個引腳編號為1、2。
受控裝置的兩個引腳編號分別為1、2。
互斥開關的引腳編號已經在互斥開關的介紹部分說明。
約束條件:
不同裝置的編號可以相同。
裝置資訊不單獨輸入,包含在連線資訊中。
2)輸入連線資訊
一條連線資訊佔一行,用[]表示一組連線在一起的裝置引腳,引腳與引腳之間用英文空格" "分隔。
格式:
"["+引腳號+" "+引腳號+"]"
例如:[K1-1 K3-2]表示K1的1號引腳,K3的2號引腳連線在一起。
約束條件:
不考慮調速器串聯到其他調速器的情況。
考慮各類裝置的並聯接入。例如,K1 的輸出接到 L2 的輸入,L2 的輸出再接其他裝置屬於串聯接線。K1 的輸出接到 L2 的輸出,同時 K1 的輸入接到 L2 的輸入,這種情況屬於並聯。
連線資訊不單獨輸入,包含線上路資訊中。
3)輸入控制裝置調節資訊
開關、互斥開關調節資訊格式:
#+裝置標識K+裝置編號,例如:#K2,代表切換K2開關的狀態。
#+裝置標識H+裝置編號,例如:#H2,代表切換H2互斥開關的狀態。
分檔調速器的調節資訊格式:
#+裝置標識F+裝置編號+"+" 代表加一檔,例如:#F3+,代表F3輸出加一檔。
#+裝置標識F+裝置編號+"-" 代表減一檔,例如:#F1-,代表F1輸出減一檔。
連續調速器的調節資訊格式:
#+裝置標識L+裝置編號+":" +數值 代表將連續調速器的檔位設定到對應數值,例如:#L3:0.6,代表L3輸出檔位引數0.6。
4)電源接地標識:
VCC,電壓220V,GND,電壓0V。沒有接線的引腳預設接地,電壓為0V。
5)輸入串聯電路資訊
一條串聯電路佔一行,串聯電路資訊由 n 個連線資訊組成,連線資訊按從靠電源端到接地端順序依次輸入,連線資訊之間用英文空格" "分隔。
串聯電路資訊格式:
"#T"+電路編號+":"+連線資訊+" "+連線資訊+...+" "+連線資訊
例如:#T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT] 一個串聯電路的第一個引腳是 IN,代表起始端,靠電源。最後一個引腳是 OUT,代表結尾端, 靠接地。
約束條件:
不同的串聯電路資訊編號不同。
輸入的最後一條電路資訊必定是總電路資訊,總電路資訊的起始引腳是 VCC,結束引腳是 GND。
連線資訊中的引腳可能是一條串聯或並聯電路的 IN 或者 OUT。例如:
#T1:[IN K1-1] [K1-2 T2-IN] [T2-OUT OUT]
#T1:[IN K1-1] [K1-2 T2-IN] [T2-OUT M2-IN] [M2-OUT OUT]
6)輸入並聯電路資訊
一條並聯電路佔一行,並聯電路由其包含的幾條串聯電路組成,串聯電路標識之間用英文空格" "分隔。
格式:
"#M"+電路編號+":"+”[”+串聯電路資訊+" "+....+" "+串聯電路資訊+”]”
例如:#M1:[T1 T2 T3]
該例宣告瞭一個並聯電路,由 T1、T2、T3 三條串聯電路並聯而成,三條串聯電路的 IN 短接在一起構成 M1 的 IN,三條串聯電路的 OUT 短接在一起構成 M1 的 OUT。
在本題中,並聯電路M中的串聯電路可以包含別的並聯電路。
約束條件:
本題不考慮輸入電壓或電壓差超過220V的情況。
輸入資訊以end為結束標誌,忽略end之後的輸入資訊。
本題中的並聯資訊所包含的串聯電路的資訊都在並聯資訊之前輸入,不考慮亂序輸入的情況。
只要不因短路而造成無窮大的電流燒壞電路(如電路中的部分短接),都是合理情況。
本次迭代考慮多個並聯電路串聯在一起的情況。
本題考慮一條串聯電路中包含其他串聯電路和並聯電路的情況。例如:
#T3:[VCC K1-1] [K1-2 T2-IN] [T2-OUT K2-1] [K2-2 T1-IN] [T1-OUT GND]
本例中T1\T2兩條串聯電路是T3的一個部分,本題考慮這種型別的輸入。
4、輸出資訊:
按開關、分檔調速器、連續調速器、白熾燈、日光燈、吊扇、互斥開關、受控窗簾、二極體(見第6部分說明)的順序依次輸出所有裝置的狀態或引數。每個裝置一行。同類裝置按編號順序從小到大輸出。
輸出格式:
@裝置標識+裝置編號+":" +裝置引數值(控制開關的檔位或狀態、燈的亮度、風扇的轉速,只輸出值,不輸出單位)+" "+裝置所有引腳的電壓(按編號從小到大順序依次輸出,電壓的小數部分直接丟棄,保留整數輸出,電壓之間用”-”分隔)
說明:
連續調速器的檔位資訊保留兩位小數,即使小數為0,依然顯示兩位小數.00。
開關狀態為0(開啟)時顯示turned on,狀態為1(合上)時顯示closed
如:
@K1:turned on 32-15
@B1:190 68-17
@L1:0.60 220-176
互斥開關按1、2引腳的接通狀態顯示,1,2接通-1,3斷開時顯示closed,1,3接通-1,2斷開時顯示turned on。
如:
@H1:turned on
受控窗簾顯示窗簾開啟的百分比,如:
@S1:80%
5、家居電路模擬系列所有題目的預設規則
1)當計算電壓值等數值的過程中,最終結果出現小數時,用截尾規則去掉小數部分,只保留整數部分。為避免精度的誤差,所有有可能出現小數的數值用double型別儲存並計算,不要作下轉型資料型別轉換,例如電壓、轉速、亮度等,只有在最後輸出時再把計算結果按截尾規則,捨棄尾數,保留整數輸出。
2)所有連線資訊按電路從靠電源端到靠接地端的順序依次輸入,不會出現錯位的情況。VCC/IN一定是第一個連線的第一項,GND/OUT一定是最後一個連線的後一項。
3)連線資訊如果只包含兩個引腳,靠電源端的引腳在前,靠接地端的在後。
4)調速器的輸入端只會直連VCC,不會接其他裝置。整個電路最多隻有連線在電源上的一個調速器,且不包含在並聯單路中。
5)本系列題目中元件的管腳除了互斥開關的1引腳,其他所有引腳在電路中最多隻出現一次。
6、本題新增內容:
1)增加管腳電壓的顯示
在輸出每個電器的狀態資訊後,再依次輸出該電器每個管腳的電壓。(格式詳見輸出資訊部分)
2)電流限制
電器在工作時,過大的電流會引起電器過熱,從而燒壞電路。本次迭代,每個元器件都有最大電流的設定,當實時電流超過最大電流時,在該電器輸出資訊的最後加入提示“exceeding current limit error”,與前面的資訊之間用英文空格分隔。
例如:@B1:190 68-17 exceeding current limit error
本題各類電器的最大限定電流如下:
開關20、分檔調速器18、連續調速器18、白熾燈9、日光燈5、吊扇12、落地扇14、互斥開關20、受控窗簾12、二極體8。
3)短路檢測
如果電路出現無窮大的電流造成短路,所有元器件資訊不輸出,僅輸出提示“short circuit error”
4)並聯電路中包含並聯
本次迭代考慮並聯電路中包含並聯電路的情況,即構成並聯電路的串聯電路可以包含別的並聯電路。例如如下輸入的電路,並聯電路M2的其中一條串聯電路T4中包含了另一條並聯電路M1:
#T1:[IN D2-1] [D2-2 H1-2] [H1-1 OUT]
#T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]
#M1:[T1 T2]
#T4:[IN K3-1] [K3-2 M1-IN] [M1-OUT OUT]
#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]
#M2:[T4 T5]
5)二極體
增加二極體元件,其電路特性為:正向導通,反向截止;其電器符號如圖4所示,當電流從左至右流過時,二極體導通”conduction”,電阻為0;電流從右至左流動時,二極體截止”cutoff”,電阻無窮大,相當於開關開啟。
image.png
圖2 二極體符號
二極體的識別符號為’P’,左側管腳編號為1,右側管腳編號為2。
二極體如果兩端電壓相等,沒有電流流過,分以下兩種情況輸出:
1、如果兩端電壓為0,二極體的導通/截止狀態由接入方向決定,1號引腳靠近電源則導通,反之截止。
2、如果兩端電壓不為0,二極體導通。
7、設計建議
本題包含以下電路圖中的所有連線情況:
image.png
圖3 電路示意圖
1、電路裝置類:描述所有電路裝置的公共特徵。
2、受控裝置類、控制裝置類:對應受控、控制裝置
3、串聯電路類:一條由多個電路裝置構成的串聯電路,也看成是一個獨立的電路裝置
4、並聯電路類:繼承電路裝置類,也看成是一個獨立的電路裝置
其他類以及類的屬性、方法自行設計。
image.png
圖4:建議設計類圖
輸入樣例1:
在這裡給出一組輸入。例如:
#T1:[IN P2-2] [P2-1 H1-2] [H1-1 OUT]
#T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]
#M1:[T1 T2]
#T4:[IN K3-1] [K3-2 M1-IN] [M1-OUT OUT]
#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]
#M2:[T4 T5]
#T3:[VCC K2-1] [K2-2 M2-IN] [M2-OUT GND]
#K1
#K2
end
輸出樣例1:
在這裡給出相應的輸出。例如:
@K1:closed 220-220 exceeding current limit error
@K2:closed 220-220 exceeding current limit error
@K3:turned on 220-0
@B1:200 220-0 exceeding current limit error
@D1:0 0-0
@H1:closed 0-0-0
@P2:cutoff 0-0
輸入樣例2:
在這裡給出一組輸入。例如:
#T1:[IN P2-1] [P2-2 H1-2] [H1-1 OUT]
#T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]
#M1:[T1 T2]
#T4:[IN K3-1] [K3-2 M1-IN] [M1-OUT OUT]
#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]
#M2:[T4 T5]
#T3:[VCC K2-1] [K2-2 M2-IN] [M2-OUT GND]
#K1
#K3
#K2
end
輸出樣例2:
在這裡給出相應的輸出。例如:
@K1:closed 220-220 exceeding current limit error
@K2:closed 220-220 exceeding current limit error
@K3:closed 220-220 exceeding current limit error
@B1:200 220-0 exceeding current limit error
@D1:0 220-220
@H1:closed 0-220-220 exceeding current limit error
@P2:conduction 220-220 exceeding current limit error
輸入樣例3:
在這裡給出一組輸入。例如:
#T1:[IN P2-2] [P2-1 H1-2] [H1-1 OUT]
#T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]
#M1:[T1 T2]
#T4:[IN K3-1] [K3-2 M1-IN] [M1-OUT OUT]
#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]
#M2:[T4 T5]
#T3:[VCC K2-1] [K2-2 M2-IN] [M2-OUT GND]
#K1
#K3
#K2
end
輸出樣例3:
在這裡給出相應的輸出。例如:
@K1:closed 220-220 exceeding current limit error
@K2:closed 220-220 exceeding current limit error
@K3:closed 220-220
@B1:200 220-0 exceeding current limit error
@D1:0 220-220
@H1:closed 0-0-220
@P2:cutoff 0-220
輸入樣例4:
在這裡給出一組輸入。例如:
#T3:[VCC K2-1] [K2-2 GND]
#K2
end
輸出樣例4:
在這裡給出相應的輸出。例如:
short circuit error
我的程式碼:
點選檢視程式碼
import java.util.*;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Electric {
public String s;
public String id;
public double shuV = 220;
public String ofopen = "turned on";
public int speed = 0;
public double lin = 0.00;
public int resistance;
public int lux;
public int xuhao;
public double current;
public double sjc;
public double ruV=0;
public double chuV=0;
public double chuV1=0;
public int xh;
public String sq=" exceeding current limit error";
public Electric(String s, String id) {
this.s = s;
this.id = id;
}
public void display() {
}
public void regulate(String vs) {
}
public void reshuV(double shuop) {
}
public void Xia(){
if(xuhao==2&&xh!=1){
if(ofopen.startsWith("t")){
double ch=ruV;
ruV=chuV1;
chuV1=ch;
}
else{
double ch=ruV;
ruV=chuV;
chuV=ch;
}
}
else if(xh!=1){
double ch=ruV;
ruV=chuV;
chuV=ch;
}
}
public void scV(int gg,double c1){
if (gg == 1) {
ruV=0;
chuV=0;
} else {
ruV = c1;
chuV = c1;
}
}
public int getL(){
return 0;
}
public int fh() {
switch (s) {
case "K":
return 10;
case "F":
return 9;
case "L":
return 8;
case "B":
return 7;
case "R":
return 6;
case "D":
return 5;
case "A":
return 4;
case "H":
return 3;
case "S":
return 2;
case "P":
return 1;
}
return 0;
}
}
class kg extends Electric {
public kg(String id) {
super("K", id);
}
public void display() {
Xia();
String ss="@K"+id+":"+ofopen+" "+(int)Math.floor(ruV)+"-"+(int)Math.floor(chuV);
if(sjc>current)
ss=ss+sq;
System.out.println(ss);
}
public void reshuV(double s) {
if (ofopen.equals("turned on")) {
shuV = 0;
chuV = 0;
} else if (ofopen.equals("closed")){
shuV = s;
chuV=shuV;
}
}
}
class fd extends Electric {
public fd(String id) {
super("F", id);
}
public void display() {
Xia();
String ss="@F"+id+":"+speed+" "+(int)Math.floor(ruV)+"-"+(int)Math.floor(chuV);
if(sjc>current)
ss=ss+sq;
System.out.println(ss);
}
public void regulate(String vs) {
if (vs.equals("+") && speed < 3) {
speed++;
} else if (vs.equals("-") && speed > 0) {
speed--;
}
}
public void reshuV(double s) {
shuV = speed * 0.3 * s;
}
}
class Lx extends Electric {
public Lx(String id) {
super("L", id);
}
public void display() {
Xia();
String s = String.format("@L%s:%.2f", id, lin);
s=s+" "+(int)Math.floor(ruV)+"-"+(int)Math.floor(chuV);
if(sjc>current)
s=s+sq;
System.out.println(s);
}
public void regulate(String vs) {
lin = Double.parseDouble(vs);
}
public void reshuV(double s) {
shuV = lin * s;
}
}
class Baichi extends Electric {
public Baichi(String id) {
super("B", id);
}
public void display() {
Xia();
int a = 0,b=(int)Math.floor(shuV);
if (b >= 0 && b <= 9) {
a = 0;
} else if (b >= 10 && b <= 219) {
a = (5 * b) / 7 + 43;
} else if (b >= 220) {
a = 200;
}
String ss="@B"+id+":"+a+" "+(int)Math.floor(ruV)+"-"+(int)Math.floor(chuV);
if(sjc>current)
ss=ss+sq;
System.out.println(ss);
}
public void reshuV(double s) {
shuV = s;
}
public int getL(){
int c=(int)Math.floor(shuV);
int a = 0;
if (c >= 0 && c <= 9) {
a = 0;
} else if (c >= 10 && c <= 219) {
a = (5 * c) / 7 + 43;
} else if (c == 220) {
a = 200;
}
return a;
}
}
class Riguang extends Electric {
public Riguang(String id) {
super("R", id);
}
public void display() {
Xia();
int a;
if (shuV == 0)
a = 0;
else
a = 180;
String ss="@R"+id+":"+a+" "+(int)Math.floor(ruV)+"-"+(int)Math.floor(chuV);
if(sjc>current)
ss=ss+sq;
System.out.println(ss);
}
public void reshuV(double s) {
shuV = s;
}
public int getL(){
int a;
if (shuV == 0)
a = 0;
else
a = 180;
return a;
}
}
class Ds extends Electric {
public Ds(String id) {
super("D", id);
}
public void display() {
Xia();
int ru=(int)Math.floor(ruV);
int chu=(int)Math.floor(chuV);
int m=(int)Math.floor(shuV);
int a = 0;
if (m >= 0 && m < 80)
a = 0;
else if (m >= 80 && m <= 150)
a = (m - 80) * 4 + 80;
else if (m > 150)
a = 360;
String ss="@D"+id+":"+a+" "+ru+"-"+chu;
if(sjc>current)
ss=ss+sq;
System.out.println(ss);
}
public void reshuV(double v) {
shuV = v;
}
}
class Luodi extends Electric {
public Luodi(String id) {
super("A", id);
}
public void display() {
Xia();
int a = 0;
if (shuV >= 0 && shuV < 80)
a = 0;
else if (shuV >= 80 && shuV <= 99)
a = 80;
else if (shuV >= 100 && shuV <= 119)
a = 160;
else if (shuV >= 120 && shuV <= 139)
a = 260;
else if (shuV > 140)
a = 360;
String ss="@A"+id+":"+a+" "+(int)Math.floor(ruV)+"-"+(int)Math.floor(chuV);
if(sjc>current)
ss=ss+sq;
System.out.println(ss);
}
public void reshuV(double w) {
shuV = w;
}
}
class Huchi extends Electric{
public Huchi(String id,int d){
super("H", id);
this.xuhao=d;
}
public void display() {
String ss="@H"+id+":"+ofopen+" "+(int)Math.floor(ruV)+"-"+(int)Math.floor(chuV)+"-"+(int)Math.floor(chuV1);
if(sjc>current)
ss=ss+sq;
System.out.println(ss);
}
public void reshuV(double v) {
if (ofopen.equals("turned on")) {
shuV = 0;
} else if (ofopen.equals("closed"))
shuV = v;
}
}
class Shoukong extends Electric{//R=15
public Shoukong(String id) {
super("S", id);
}
public void display() {
Xia();
int ru=(int)Math.floor(ruV);
int chu=(int)Math.floor(chuV);
String a = "100%";
if(shuV>=50){
if (lux >= 0 && lux < 50)
a = "100%";
else if (lux >= 50 && lux < 100)
a = "80%";
else if (lux >= 100 && lux < 200)
a = "60%";
else if (lux >= 200 && lux < 300)
a = "40%";
else if (lux >= 300 && lux <400)
a = "20%";
else if (lux >=400)
a = "0%";
}
String ss="@S"+id+":"+a+" "+ru+"-"+chu;
if(sjc>current)
ss=ss+sq;
System.out.println(ss);
}
public void reshuV(double s) {
shuV = s;
}
}
class Erjiguan extends Electric{
public Erjiguan(String s){
super("P",s);
}
public void display() {
Xia();
String ss="@P"+id+":"+ofopen+" "+(int)Math.floor(ruV)+"-"+(int)Math.floor(chuV);
if(sjc>current)
ss=ss+sq;
System.out.println(ss);
}
public void reshuV(double c){
shuV = c;
}
}
class Bi extends Electric {
public Bi(String ml) {
super("M", ml);
}
}
class Chuan extends Electric{
public Chuan(String ml){
super("T",ml);
}
}
class Duobing{
public String s;
public ArrayList<Map<String, Electric>> map;
public double[] k;
public double a;
public Duobing(String s, ArrayList<Map<String, Electric>> map, double[] b,double a)
{
this.s=s;
this.map=map;
this.k=b;
this.a=a;
}
}
class Fanhui{
public Map<String, Electric> map;
public double zl;
public double sV;
public Fanhui(Map<String, Electric> map,double zl,double sv){
this.map=map;
this.zl=zl;
this.sV=sv;
}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = "", pop = "", chuanxu = "", bingxu = "";
int i;
ArrayList<String> connection = new ArrayList<>();
ArrayList<String> connection1 = new ArrayList<>();
ArrayList<String> chw = new ArrayList<>();
while (true) {
s = in.nextLine().trim();
if ("end".equals(s))
break;
if (s.startsWith("#T"))
{
Pattern pattern = Pattern.compile("#(.*):(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
chuanxu = matcher.group(1);
pop = matcher.group(2);
}
connection.add(chuanxu + ":" + pop);
}
else if (s.startsWith("#M"))
{
Pattern pattern = Pattern.compile("#(.*):(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
bingxu = matcher.group(1);
pop = matcher.group(2);
}
connection1.add(bingxu + " " + pop);
}
else if (s.startsWith("#K"))
{
Pattern pattern = Pattern.compile("#(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
pop = matcher.group(1);
}
chw.add(pop);
}
else if (s.startsWith("#F")) {
Pattern pattern = Pattern.compile("#(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
pop = matcher.group(1);
}
chw.add(pop);
}
else if (s.startsWith("#L")) {
Pattern pattern = Pattern.compile("#(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
pop = matcher.group(1);
}
chw.add(pop);
}
else if(s.startsWith("#H")){
Pattern pattern = Pattern.compile("#(.*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
pop = matcher.group(1);
}
chw.add(pop);
}
}
int kllk = 0,mmm=0;
String z1 = "", zm = "",bnb="";
Map<String, Map<String, Electric>> mac = new HashMap<>();
Map<String, Electric> zhu = new LinkedHashMap<>();
for (mmm = 0; mmm < connection.size(); mmm++) {
int vb1 = 0, vb2 = 0;
Map<String, Electric> map1 = new LinkedHashMap<>();
z1 = connection.get(mmm);
Pattern pattern = Pattern.compile("(.*):(.*)");
Matcher matcher = pattern.matcher(z1);
while (matcher.find()) {
zm = matcher.group(1);
pop = matcher.group(2);
}
String[] partsl = pop.split("]");
String jk="",jk1="";
for (kllk = 0; kllk < partsl.length; kllk++) {
jk1 = partsl[0].trim();
jk = partsl[kllk].trim();
if (jk1.startsWith("[IN")) {
vb1 = 1;
String[] parts4 = jk.split(" ");
if(parts4[1].equals("OUT")){
if(parts4[0].startsWith("[H")) {
String[] pinyin = parts4[0].split("-");
String dkey="";
pattern = Pattern.compile("\\[(.*)");
matcher = pattern.matcher(pinyin[0]);
while (matcher.find()) {
dkey = matcher.group(1);
}
if (dkey.startsWith("H")) {
int m1 = Integer.parseInt(pinyin[1]);
if ((m1 == 2 || m1 == 3) && parts4[0] != null) {
bnb = parts4[0].substring(1, 3);
map1 = compose(dkey, bnb, map1, m1,1);
}
}
break;
}
else {
break;
}
}
if(parts4[0].startsWith("[H")){
String[] pinyin = parts4[0].split("-");
String dkey="";
pattern = Pattern.compile("\\[(.*)");
matcher = pattern.matcher(pinyin[0]);
while (matcher.find()) {
dkey = matcher.group(1);
}
int m1=Integer.parseInt(pinyin[1]);
if((m1==2||m1==3)&&parts4[0]!=null){
bnb=parts4[0].substring(1,3);
map1 = compose(dkey, bnb, map1,m1,1);
}
String[] pinyin1 = parts4[1].split("-");
dkey = pinyin1[0].trim();
if(dkey.startsWith("H")){
m1=Integer.parseInt(pinyin1[1]);
if(m1==2||m1==3){
map1 = compose(dkey, parts4[1], map1,m1,2);
}
}
else{
m1=Integer.parseInt(pinyin1[1]);
map1 = complain(dkey, parts4[1], map1,m1,m1);
}
}
else {
String[] pinyin = parts4[1].split("-");
String dkey = pinyin[0].trim();
if(dkey.startsWith("H")){
int m1=Integer.parseInt(pinyin[1]);
if(m1==2||m1==3){
map1 = compose(dkey, parts4[1], map1,m1,2);
}
}
else{
if(!pinyin[1].equals("IN")){
int m1=Integer.parseInt(pinyin[1]);
map1 = complain(dkey, parts4[1], map1,m1,m1);
}
else {
map1 = complain(dkey, parts4[1], map1,1,1);
}
}
}
}
else if (jk1.startsWith("[VCC")) {
vb2 = 1;
String[] parts4 = jk.split(" ");
if(parts4[1].equals("GND")){
if(parts4[0].startsWith("[H")) {
String[] pinyin = parts4[0].split("-");
String dkey="";
pattern = Pattern.compile("\\[(.*)");
matcher = pattern.matcher(pinyin[0].trim());
while (matcher.find()) {
dkey = matcher.group(1);
}
int m1 = Integer.parseInt(pinyin[1]);
if ((m1 == 2 || m1 == 3) && parts4[0] != null) {
bnb = parts4[0].substring(1, 3);
map1 = compose(dkey, bnb, map1, m1,1);
}
break;
}
else {break;}
}
if(parts4[0].startsWith("[H")){
String[] pinyin = parts4[0].split("-");
String dkey="";
pattern = Pattern.compile("\\[(.*)");
matcher = pattern.matcher(pinyin[0].trim());
while (matcher.find()) {
dkey = matcher.group(1);
}
int m1=Integer.parseInt(pinyin[1]);
if((m1==2||m1==3)&&parts4[0]!=null){
bnb=parts4[0].substring(1,3);
map1 = compose(dkey, bnb, map1,m1,1);
}
String[] pinyin1 = parts4[1].split("-");
dkey = pinyin1[0].trim();
m1=Integer.parseInt(pinyin1[1]);
if(dkey.startsWith("H")){
if(m1==2||m1==3){
map1 = compose(dkey, parts4[1], map1,m1,2);
}
}
else{
map1 = complain(dkey, parts4[1], map1,m1,m1);
}
}
else {
String[] pinyin = parts4[1].split("-");
String dkey = pinyin[0].trim();
if(dkey.startsWith("H")){
int m1=Integer.parseInt(pinyin[1]);
if(m1==2||m1==3){
map1 = compose(dkey, parts4[1], map1,m1,2);
}
}
else{
if(!pinyin[1].equals("IN")){
int m1=Integer.parseInt(pinyin[1]);
map1 = complain(dkey, parts4[1], map1,m1,m1);
}
else {
map1 = complain(dkey, parts4[1], map1,1,1);
}
}
}
}
}
if (vb1 == 1){
mac.put(zm, map1);
}
if (vb2 == 1) {
zhu = map1;
}
}
int flag = 0;
double rui = 220;
double rui1=rui;
for (i = 0; i < chw.size(); i++) {
String sid = chw.get(i);
for (Entry<String, Map<String, Electric>> entry : mac.entrySet()){
if (sid.startsWith("K")) {
String diu = sid.trim();
Electric electric = entry.getValue().get(diu);
if (electric != null) {
if (electric.ofopen.startsWith("t"))
electric.ofopen = "closed";
else
electric.ofopen = "turned on";
break;
}
}
else if (sid.startsWith("F")) {
String diu="",vs="";
Pattern pattern = Pattern.compile("(.*)(.)");
Matcher matcher = pattern.matcher(sid);
while (matcher.find()) {
diu = matcher.group(1);
vs = matcher.group(2);
}
Electric electric = entry.getValue().get(diu);
if (electric != null) {
electric.regulate(vs);
if (vs.equals("+")) {
flag++;
if (flag >= 3) {
flag = 3;
}
}
if (vs.equals("-")) {
flag--;
if (flag <= 0) {
flag = 0;
}
}
break;
}
}
else if (sid.startsWith("L")) {
String diu = sid.substring(0, 2);
String vs = sid.substring(3);
Electric electric = entry.getValue().get(diu);
if (electric != null) {
electric.regulate(vs);
break;
}
}
else if(sid.startsWith("H")){
String diu = sid.trim();
int n1=0,n2=0;
for (Entry<String, Map<String, Electric>> try1 : mac.entrySet()){
Electric electric = try1.getValue().get(diu+2);
if (electric != null) {
n1=1;
if (electric.ofopen.startsWith("t"))
electric.ofopen = "closed";
else
electric.ofopen = "turned on";
break;
}
}
for (Entry<String, Map<String, Electric>> try1 : mac.entrySet()){
Electric electric1 = try1.getValue().get(diu+3);
if (electric1 != null) {
n2=1;
if (electric1.ofopen.startsWith("t"))
electric1.ofopen = "closed";
else
electric1.ofopen = "turned on";
break;
}
}
if(n1==1||n2==1)
break;
}
}
for (Entry<String, Electric> ignored1 : zhu.entrySet()) {
if (sid.startsWith("K")) {
String diu = sid.trim();
Electric electric = zhu.get(diu);
if (electric != null) {
if (electric.ofopen.startsWith("t"))
electric.ofopen = "closed";
else
electric.ofopen = "turned on";
break;
}
}
else if (sid.startsWith("H")) {
String diu = sid.trim();
int n1=0,n2=0;
for (Entry<String, Electric> ignored : zhu.entrySet()){
Electric electric = zhu.get(diu+2);
if (electric != null) {
n1=1;
if (electric.ofopen.startsWith("t"))
electric.ofopen = "closed";
else
electric.ofopen = "turned on";
break;
}
}
for (Entry<String, Electric> ignored : zhu.entrySet()){
Electric electric1 = zhu.get(diu+3);
if (electric1 != null) {
n2=1;
if (electric1.ofopen.startsWith("t"))
electric1.ofopen = "closed";
else
electric1.ofopen = "turned on";
break;
}
}
if(n1==1||n2==1)
break;
}
else if (sid.startsWith("F")) {
String diu="",vs="";
Pattern pattern = Pattern.compile("(.*)(.)");
Matcher matcher = pattern.matcher(sid);
while (matcher.find()) {
diu = matcher.group(1);
vs = matcher.group(2);
}
Electric electric = zhu.get(diu);
if (electric != null) {
electric.regulate(vs);
break;
}
}
else if (sid.startsWith("L")) {
String diu = sid.substring(0, 2);
String vs = sid.substring(3);
Electric electric = zhu.get(diu);
if (electric != null) {
electric.regulate(vs);
break;
}
}
}
}
Map<String,ArrayList<Map<String, Electric>>> vjk=new LinkedHashMap<>();
Map<String, Map<String, Electric>> maps = new HashMap<>();
for (mmm = 0; mmm < connection1.size(); mmm++) {
String k11 = connection1.get(mmm).substring(0, 2);
Pattern pattern = Pattern.compile("(.*)\\s\\[(.*)]");
Matcher matcher = pattern.matcher(connection1.get(mmm));
while (matcher.find()) {
pop =matcher.group(2);
}
String[] pa = pop.split(" ");
ArrayList<Map<String, Electric>> uzi=new ArrayList<>();
for (int yq = 0; yq < pa.length; yq++) {
for (Entry<String, Map<String, Electric>> entry1 : mac.entrySet()) {
if (entry1.getKey().equals(pa[yq])) {
maps.put(k11 + yq, entry1.getValue());
uzi.add(entry1.getValue());
}
}
vjk.put(k11,uzi);
}
}
double[] b = new double[1];
int sum1,sum2=0,sum3,s1,mv=0,mv1=0,zonglux,cw,cw1=0,index4=0,ind=0,index5=0;
double cR, bingR=0;
ArrayList<Duobing> db=new ArrayList<>();
for(Entry<String, Electric> fd:zhu.entrySet()) {
for (Entry<String, ArrayList<Map<String, Electric>>> entry : vjk.entrySet()) {
if (fd.getKey().equals(entry.getKey())) {
ind++;
}
}
}
double[] a = new double[ind];
for(Entry<String, Electric> fd:zhu.entrySet()){
for(Entry<String,ArrayList<Map<String, Electric>>> entry : vjk.entrySet()) {
if(fd.getKey().equals(entry.getKey())){
double[] c= new double[entry.getValue().size()];
i = 0;
int cw2=0;
for (sum1 = 0; sum1 < entry.getValue().size(); sum1++) {
c[i]=0;
int hjh = 0;
for (Entry<String, Electric> entry1 : entry.getValue().get(sum1).entrySet()) {
flag = 0;
if (entry1.getKey().startsWith("K")) {
if (entry1.getValue().ofopen.startsWith("t"))
flag = 1;
else
hjh++;
}
if (entry1.getKey().startsWith("H")) {
if (entry1.getValue().ofopen.startsWith("t"))
flag = 1;
else
hjh++;
}
if (entry1.getKey().startsWith("P")) {
if (entry1.getValue().ofopen.equals("cutoff"))
flag = 1;
else
hjh++;
}
if(entry1.getKey().startsWith("T")){
cw=0;
for(Entry<String, Map<String, Electric>> en6 : mac.entrySet()) {
if (en6.getKey().equals(entry1.getKey())) {
for(Entry<String, Electric> e : en6.getValue().entrySet()){
cw++;
if (e.getKey().startsWith("K")) {
if (e.getValue().ofopen.startsWith("t"))
flag = 1;
else
hjh++;
}
if (e.getKey().startsWith("H")) {
if (e.getValue().ofopen.startsWith("t"))
flag = 1;
else
hjh++;
}
if (e.getKey().startsWith("P")) {
if (e.getValue().ofopen.equals("cutoff"))
flag = 1;
else
hjh++;
}
c[i] = c[i] + 1.0 * e.getValue().resistance;
}
cw1=cw+cw1;
}
}
}
if(entry1.getKey().startsWith("M")){
double thisR = 0;
ArrayList<Map<String, Electric>> acm=vjk.get(entry1.getKey());
double[] qq= new double[acm.size()];
int ii = 0;
for (Map<String, Electric> stringElectricMap : acm) {
qq[ii]=0;
for (Entry<String, Electric> ent : stringElectricMap.entrySet()) {
int hjh1 = 0;
int indflag = 0;
if (ent.getKey().startsWith("K")) {
if (ent.getValue().ofopen.startsWith("t"))
indflag = 1;
else
hjh1++;
}
if (ent.getKey().startsWith("H")) {
if (ent.getValue().ofopen.equals("turned on"))
indflag = 1;
else
hjh1++;
}
if (ent.getKey().startsWith("P")) {
if (ent.getValue().ofopen.equals("cutoff"))
indflag = 1;
else
hjh1++;
}
if(entry1.getKey().startsWith("T")){
cw=0;
for(Entry<String, Map<String, Electric>> en6 : mac.entrySet()) {
if (en6.getKey().equals(entry1.getKey())) {
for(Entry<String, Electric> e : en6.getValue().entrySet()){
cw++;
if (e.getKey().startsWith("K")) {
if (e.getValue().ofopen.startsWith("t"))
indflag = 1;
else
hjh1++;
}
if (e.getKey().startsWith("H")) {
if (e.getValue().ofopen.startsWith("t"))
indflag = 1;
else
hjh1++;
}
if (e.getKey().startsWith("P")) {
if (e.getValue().ofopen.equals("cutoff"))
indflag = 1;
else
hjh1++;
}
qq[ii] =qq[ii] + 1.0 * e.getValue().resistance;
}
cw2=cw+cw2;
}
}
}
if (hjh1 == stringElectricMap.size()+cw2) {
qq[ii] = 0;
break;
}
if (indflag == 1){
qq[ii] = -1;
break;
}
else if(indflag==0) {
qq[ii] = qq[ii] + 1.0 * ent.getValue().resistance;
}
}
ii++;
}
int ss=0;
int ss1=0;
for (double v : qq) {
for(double csd:qq){
if (csd == -1) {
ss1 = 1;
break;
}
}
if (v == 0&&ss1==0) {
index5 = 1;
thisR = 0;
break;
} else {
if (v == -1) {
ss++;
if (ss == qq.length)
mv1 = 1;
} else
thisR = 1.0 / v + thisR;
}
}
if(mv1==1){
c[i]=-2;
}
else c[i]=c[i]+1.0/thisR;
db.add(new Duobing(entry1.getKey(), acm,qq,thisR));
}
if (hjh ==entry.getValue().get(sum1).size()+cw1) {
c[i] = 0;
}
if (flag == 1)
c[i] = -1;
else
c[i] = c[i] + 1.0 * entry1.getValue().resistance;
}
i++;
}
s1=0;
int sasa=0;
for (i = 0; i < c.length; i++) {
//System.out.println(c[i]);
for(double scs:c){
if(scs==-1){
sasa=1;
break;
}
}
if (c[i] == 0&&sasa==0) {
index4=0;
a[sum2] = 0;
break;
}
else if(c[i] == 0&&sasa!=0)
a[sum2]=0;
else {
if (c[i] == -1||c[i]==-2){
s1++;
if(s1==c.length){
mv=1;
}
}
else
a[sum2] = 1.0 / c[i] + a[sum2];
}
}
db.add(new Duobing(entry.getKey(), entry.getValue(), c,a[sum2]));
sum2++;
}
}
}
for(sum3=0;sum3<a.length;sum3++){
if (a[sum3] != 0) {
bingR = bingR+1.0/a[sum3];
}
}
b[0]=0;
double[] l =new double[1];
int flag4 = 0;
int index1=0,index2=0;
for (Entry<String, Electric> entry : zhu.entrySet()) {
index2++;
flag=0;
if (entry.getKey().startsWith("K")) {
flag=0;
if (entry.getValue().ofopen.startsWith("t")){
flag = 1;
}
else {
index1++;
}
if(flag==1){
b[0] = -1;
break;
}
}
else if (entry.getKey().startsWith("H")) {
flag=0;
if (entry.getValue().ofopen.startsWith("t")){
flag = 1;
}
else{
index1++;
}
if(flag==1){
b[0] = -1;
break;
}
}
else if (entry.getKey().startsWith("P")) {
flag=0;
if (entry.getValue().ofopen.startsWith("cut")){
flag = 1;
}
else
index1++;
if(flag==1){
b[0] = -1;
break;
}
}
else if(entry.getKey().startsWith("T")){
l[0]=0;
index2--;
for(Entry<String, Map<String, Electric>> entry6 : mac.entrySet()) {
index2++;
if(entry6.getKey().equals(entry.getKey())) {
for(Entry<String, Electric> en : entry6.getValue().entrySet()) {
if (en.getKey().startsWith("K")) {
flag4=0;
if (en.getValue().ofopen.startsWith("t")) {
flag4 = 1;
}
else{
index1++;
}
if (flag4 == 1) {
l[0] = -1;
break;
}
}
else if(en.getKey().startsWith("H")){
flag4=0;
if (en.getValue().ofopen.startsWith("t")) {
flag4 = 1;
}
else{
index1++;
}
if (flag4 == 1) {
l[0] = -1;
break;
}
else
l[0]=l[0]+en.getValue().resistance;
}
else if(en.getKey().startsWith("P")){
flag4=0;
if (entry.getValue().ofopen.startsWith("cut")){
flag4 = 1;
}
else
index1++;
if(flag4==1){
b[0] = -1;
break;
}
else
l[0]=l[0]+en.getValue().resistance;
}
else
l[0]=l[0]+en.getValue().resistance;
}
break;
}
}
if(l[0]==-1){
b[0]=-1;
break;
}
else{
b[0]=b[0]+l[0];
}
}
b[0] = b[0] + entry.getValue().resistance;
}
cR = b[0];
double chuanV, bingV;
double chuanliu=0;
int index=0;
chuanV = rui * cR / (bingR + cR);
bingV = rui * bingR / (bingR + cR);
chuanliu=rui/(bingR + cR);
zonglux=0;
Map<String, Electric> maso = new HashMap<>();
for (Entry<String, Electric> entry : zhu.entrySet()) {
String parts8 = entry.getKey();
s = parts8;
if(index2==index1||index4==1||index5==1||(b[0]==0&&bingR==0)){
index=1;
}
if(b[0]==-1||flag4==1||flag==1||mv==1){
rui=0;
chuanV=0;
bingV=0;
chuanliu=0;
}
if (s.startsWith("K")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(rui);
rui = elc1.shuV;
chuanV = 1.0*rui * cR / (bingR + cR);
bingV = 1.0*rui * bingR / (bingR + cR);
chuanliu = rui / (cR+bingR);
elc1.ruV=rui1;
if(elc1.ofopen.startsWith("t")){
elc1.chuV=0;
chuanliu=0;
rui1=0;
}
else
elc1.chuV=rui1;
elc1.sjc=chuanliu;
maso.put(s, elc1);
}
else if (s.startsWith("H")) {
Electric elc1 = zhu.get(parts8);
if(elc1.xuhao ==3){
if(elc1.ofopen.startsWith("t")){
elc1.ofopen="closed";
elc1.ruV=0;
rui1=0;
chuanliu=0;
}
else{
elc1.ruV=rui1;
elc1.ofopen="turned on";
}
elc1.chuV=0;
elc1.chuV1=rui1-10*chuanV/cR;
rui1=elc1.chuV1;
}
else{
if(elc1.ofopen.startsWith("t")){
elc1.ruV=0;
rui1=0;
chuanliu=0;
}
else{
elc1.ruV=rui1;
}
elc1.chuV=rui1-5*chuanV/cR;
elc1.chuV1=0;
rui1=elc1.chuV;
}
elc1.sjc=chuanliu;
maso.put(s, elc1);
}
else if (s.startsWith("B")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(10*chuanV/cR);
zonglux=zonglux+elc1.getL();
elc1.ruV=rui1;
elc1.chuV=rui1-10*chuanV/cR;
rui1=elc1.chuV;
elc1.sjc=chuanliu;
maso.put(s, elc1);
}
else if (s.startsWith("R")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(5*chuanV/cR);
elc1.sjc=chuanliu;
elc1.ruV=rui1;
elc1.chuV=rui1-5*chuanV/cR;
rui1=elc1.chuV;
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
}
else if (s.startsWith("D")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(20*chuanV/cR);
elc1.ruV=rui1;
elc1.chuV=rui1-20*chuanV/cR;
rui1=elc1.chuV;
elc1.sjc=chuanliu;
maso.put(s, elc1);
}
else if (s.startsWith("A")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(20*chuanV/cR);
elc1.ruV=rui1;
elc1.chuV=rui1-20*chuanV/cR;
rui1=elc1.chuV;
elc1.sjc=chuanliu;
maso.put(s, elc1);
}
else if (s.startsWith("L")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(rui);
rui = elc1.shuV;
chuanV = rui * cR / (bingR + cR);
bingV = rui * bingR / (bingR + cR);
chuanliu = rui / (cR+bingR);
elc1.sjc=chuanliu;
elc1.ruV=rui1;
elc1.chuV=rui1;
maso.put(s, elc1);
}
else if (s.startsWith("F")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(rui);
rui=elc1.shuV;
chuanV = rui * cR / (bingR + cR);
bingV = rui * bingR / (bingR + cR);
chuanliu = rui / (cR+bingR);
elc1.ruV=rui1;
elc1.chuV=rui1;
elc1.sjc=chuanliu;
maso.put(s, elc1);
}
else if (s.startsWith("S")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(15*chuanV/cR);
elc1.sjc=chuanliu;
elc1.ruV=rui1;
elc1.chuV=rui1-15*chuanV/cR;
rui1=elc1.chuV;
maso.put(s, elc1);
}
else if (s.startsWith("P")) {
Electric elc1 = zhu.get(parts8);
if(elc1.ofopen.startsWith("cut")){
elc1.chuV=0;
chuanliu=0;
rui1=0;
}
else
elc1.chuV=rui1;
elc1.sjc=chuanliu;
elc1.ruV=rui1;
maso.put(s, elc1);
}
else if(s.startsWith("T")) {
for(Entry<String, Map<String, Electric>> entry6 : mac.entrySet()) {
if(entry6.getKey().equals(s)){
for(Entry<String,Electric> jk : entry6.getValue().entrySet()) {
s=jk.getKey();
if (s.startsWith("K")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(rui);
rui = elc1.shuV;
chuanV = 1.0*rui * cR / (bingR + cR);
bingV = 1.0*rui * bingR / (bingR + cR);
chuanliu = rui / (cR+bingR);
elc1.ruV=rui1;
if(elc1.ofopen.startsWith("t")){
elc1.chuV=0;
chuanliu=0;
rui1=0;
}
else
elc1.chuV=rui1;
elc1.sjc=chuanliu;
maso.put(s, elc1);
maso.put(s, elc1);
} else if(s.startsWith("H")) {
Electric elc1 = entry6.getValue().get(s);
if(elc1.xuhao ==3){
if(elc1.ofopen.startsWith("t")){
chuanliu=0;
elc1.ofopen="closed";
}
else{
elc1.ofopen="turned on";
}
elc1.ruV=rui1;
elc1.chuV=0;
elc1.chuV1=rui1-10*chuanV/cR;
rui1=elc1.chuV1;
} else{
if(elc1.ofopen.startsWith("t")){
chuanliu=0;
}
elc1.ruV=rui1;
elc1.chuV=rui1-5*chuanV/cR;
elc1.chuV1=0;
rui1=elc1.chuV;
}
elc1.sjc=chuanliu;
maso.put(s, elc1);
} else if (s.startsWith("B")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(10 * chuanV / cR);
elc1.sjc=chuanliu;
elc1.ruV=rui1;
elc1.chuV=rui1-10*chuanV/cR;
rui1=elc1.chuV;
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
} else if (s.startsWith("R")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(5 * chuanV / cR);
elc1.sjc=chuanliu;
elc1.ruV=rui1;
elc1.chuV=rui1-5*chuanV/cR;
rui1=elc1.chuV;
maso.put(s, elc1);
zonglux=zonglux+elc1.getL();
} else if (s.startsWith("D")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(20 * chuanV / cR);
elc1.sjc=chuanliu;
elc1.ruV=rui1;
elc1.chuV=rui1-20*chuanV/cR;
rui1=elc1.chuV;
maso.put(s, elc1);
} else if (s.startsWith("A")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(20 * chuanV / cR);
elc1.sjc=chuanliu;
elc1.ruV=rui1;
elc1.chuV=rui1-20*chuanV/cR;
rui1=elc1.chuV;
maso.put(s, elc1);
} else if (s.startsWith("S")) {
Electric elc1 = entry6.getValue().get(s);
elc1.reshuV(15 * chuanV / cR);
elc1.sjc=chuanliu;
elc1.ruV=rui1;
elc1.chuV=rui1-15*chuanV/cR;
rui1=elc1.chuV;
maso.put(s, elc1);
}
else if(s.startsWith("P")){
Electric elc1=entry6.getValue().get(s);
if(elc1.ofopen.startsWith("cut")){
elc1.chuV=0;
chuanliu=0;
rui1=0;
}
else
elc1.chuV=rui1;
elc1.sjc=chuanliu;
elc1.ruV=rui1;
maso.put(s, elc1);
}
}
}
}
}
else if (s.startsWith("M")) {
Fanhui fanhui=search(s,maso, db,bingV,bingR,zonglux, rui1);
maso=fanhui.map;
zonglux= (int) fanhui.zl;
for (Duobing duobing : db) {
if (duobing == null) continue;
if (duobing.s.equals(s)) {
if(duobing.a!=0)
rui1 = rui1 - bingV * (1.0 / duobing.a) / bingR;
}
}
}
}
if(index==1){
System.out.println("short circuit error");
}
else
{
ArrayList<Electric> arraylist6 = new ArrayList<>();
for (Entry<String, Electric> pose : maso.entrySet()) {
if(pose.getValue()==null)continue;
arraylist6.add(pose.getValue());
}
Comparator<Electric> numberComparator = (o1, o2) -> {
int a1 = o1.fh();
int b1 = o2.fh();
if (a1 > b1)
return -1;
else if (a1 == b1) {
String c = o1.id;
String d = o2.id;
if (c.compareTo(d)>0)
return 1;
else
return -1;
} else
return 1;
};
arraylist6.sort(numberComparator);
for (Electric ss : arraylist6) {
if(ss.s.equals("S")){
ss.lux=zonglux;
}
if(ss.chuV<0)
ss.chuV=0;
if(ss.chuV1<0)
ss.chuV1=0;
if(ss.ruV<=0)
ss.ruV=0;
if(ss.chuV>=220)
ss.chuV=220;
if(ss.chuV1>=220)
ss.chuV1=220;
if(ss.ruV<=0)
ss.ruV=0;
ss.display();
}
}
}
public static Map<String, Electric> complain(String d, String s, Map<String, Electric> map1,int a,int b) {
String k="";
Pattern pattern = Pattern.compile(".(.*)");
Matcher matcher = pattern.matcher(d);
while (matcher.find()) {
k = matcher.group(1);
}
if (s.startsWith("K")) {
Electric t = new kg(k);
t.resistance = 0;
t.lux=0;
t.current=20;
t.xh=b;
map1.put(d, t);
} else if (s.startsWith("F")) {
Electric t = new fd(k);
t.resistance = 0;
t.lux=0;
t.current=18;
t.xh=b;
map1.put(d, t);
} else if (s.startsWith("L")) {
Electric t = new Lx(k);
t.resistance = 0;
t.lux=0;
t.current=18;
t.xh=b;
map1.put(d, t);
} else if (s.startsWith("B")) {
Electric t = new Baichi(k);
t.resistance = 10;
t.current=9;
t.xh=b;
map1.put(d, t);
} else if (s.startsWith("R")) {
Electric t = new Riguang(k);
t.resistance = 5;
t.current=5;
t.xh=b;
map1.put(d, t);
} else if (s.startsWith("D")) {
Electric t = new Ds(k);
t.resistance = 20;
t.current=12;
t.xh=b;
map1.put(d, t);
} else if (s.startsWith("A")) {
Electric t = new Luodi(k);
t.resistance = 20;
t.current=14;
t.xh=b;
map1.put(d, t);
} else if (s.startsWith("M")) {
Electric t1 = new Bi(k);
t1.resistance = 0;
t1.current=0;
map1.put(d,t1);
} else if (s.startsWith("T")) {
Electric t = new Chuan(k);
t.resistance = 0;
t.current=0;
map1.put(d,t);
} else if (s.startsWith("H")) {
Electric t = new Huchi(k,a);
t.xuhao=a;
if(a==2) {
t.resistance = 5;
t.ofopen="closed";
}
if(a==3){
t.resistance = 10;
t.ofopen="turned on";
}
t.xh=b;
t.current=20;
map1.put(d,t);
} else if (s.startsWith("S")) {
Electric t = new Shoukong(k);
t.resistance = 15;
t.xuhao=2;
t.current=12;
t.xh=b;
map1.put(d,t);
} else if (s.startsWith("P")) {
Electric t = new Erjiguan(k);
t.resistance = 0;
t.xuhao=2;
t.current=8;
if(a==1){
t.ofopen="conduction";
}
else if(a==2){
t.ofopen="cutoff";
}
t.xh=b;
map1.put(d,t);
}
return map1;
}
public static Map<String, Electric> compose(String dkey, String s, Map<String, Electric> map1, int m,int n) {
String jkj="";
Pattern pattern = Pattern.compile(".(.*)");
Matcher matcher = pattern.matcher(dkey);
while (matcher.find()) {
jkj = matcher.group(1);
}
if (s.startsWith("H")) {
Electric t = new Huchi(jkj,m);
t.current=20;
t.xuhao=m;
if(m==2) {
t.resistance = 5;
t.ofopen="closed";
}
if(m==3){
t.resistance = 10;
t.ofopen="turned on";
}
t.xh=n;
map1.put(dkey+m,t);
}
return map1;
}
public static Fanhui search(String s, Map<String, Electric> maso, ArrayList<Duobing> ddb, double bingV, double bingR, double zonglux, double rui1) {
double m1;
Duobing d1;
for (int cmd = 0; cmd < ddb.size(); cmd++) {
if (ddb.get(cmd) == null) continue;
m1=rui1;
d1 = ddb.get(cmd);
if (d1.s.equals(s)) {
for (int kkkk = 0; kkkk < d1.map.size(); kkkk++) {
double cw;
int gg=0;
if (d1.map.get(kkkk) == null) continue;
double siop = bingV * (1.0 / d1.a) / bingR;
String parts8;
int yy=0;
double mm=m1;
//System.out.println(rui1);
if ((d1.k[kkkk] != -1 && d1.k[kkkk] != 0)||d1.k[kkkk]==-2) {
for (Entry<String, Electric> c1 : d1.map.get(kkkk).entrySet()) {
rui1 = mm;
parts8 = c1.getKey();
s = parts8;
//System.out.println(s);
if (s.startsWith("K")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
elc1.ruV = mm;
if(elc1.ofopen.startsWith("t")){
siop =0;
mm=0;
elc1.chuV = 0;
}
else
elc1.chuV = mm;
elc1.sjc = siop / d1.k[kkkk];
maso.put(s, elc1);
} else if (s.startsWith("H")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
if (elc1.xuhao == 3) {
yy = 1;
String jkj = "";
Pattern pattern = Pattern.compile("(.*).");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
jkj = matcher.group(1);
}
for (int d = 0; d < d1.map.size(); d++) {
for (Entry<String, Electric> ignored : d1.map.get(d).entrySet()) {
Electric elc2 = d1.map.get(d).get(jkj + 2);
if (elc2 != null){
yy = 2;
if (elc1.ofopen.startsWith("t")){
elc1.ofopen = "closed";
}
else{
elc1.ofopen = "turned on";
}
elc1.chuV1=mm;
mm=mm-10*siop/d1.k[kkkk];
maso.put(s, elc1);
break;
}
}
}
if (yy == 1) {
if (elc1.ofopen.startsWith("t"))
elc1.ofopen = "closed";
else
elc1.ofopen="turned on";
elc1.ruV = mm - 10 * siop / d1.k[kkkk];
elc1.chuV = 0;
elc1.chuV1 = mm;
mm = mm - 10 * siop / d1.k[kkkk];
elc1.sjc = siop / d1.k[kkkk];
maso.put(s, elc1);
}
}
else{
elc1.chuV = mm;
if(elc1.ofopen.startsWith("t")){
elc1.ruV = 0;
}
else{
elc1.ruV=mm;
mm = mm - 5 * siop / d1.k[kkkk];
}
elc1.sjc = siop / d1.k[kkkk];
String jkj = "";
Pattern pattern = Pattern.compile("(.*).");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
jkj = matcher.group(1);
}
for (int d = 0; d < d1.map.size(); d++) {
for (Entry<String, Electric> ignored : d1.map.get(d).entrySet()) {
Electric e = d1.map.get(d).get(jkj + 3);
if (e != null){
yy = 2;
e.sjc = elc1.sjc;
e.chuV=elc1.chuV;
}
}
}
if(yy!=2){
elc1.chuV1=0;
maso.put(s, elc1);
}
}
} else if (s.startsWith("B")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(10 * siop / d1.k[kkkk]);
elc1.ruV = mm;
elc1.chuV = mm - 10 * siop / d1.k[kkkk];
mm = mm - 10* siop /d1.k[kkkk];
elc1.sjc = siop / d1.k[kkkk];
maso.put(s, elc1);
zonglux = zonglux + elc1.getL();
} else if (s.startsWith("R")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(5 * siop / d1.k[kkkk]);
elc1.ruV = mm;
elc1.chuV = mm - 5 * siop / d1.k[kkkk];
mm = mm - 5 * siop / d1.k[kkkk];
elc1.sjc = siop / d1.k[kkkk];
maso.put(s, elc1);
zonglux = zonglux + elc1.getL();
} else if (s.startsWith("D")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(20 * siop / d1.k[kkkk]);
elc1.ruV = mm;
elc1.chuV = mm - 20 * siop / d1.k[kkkk];
mm = mm - 20 * siop / d1.k[kkkk];
elc1.sjc = siop / d1.k[kkkk];
maso.put(s, elc1);
} else if (s.startsWith("A")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(20 * siop / d1.k[kkkk]);
elc1.ruV = mm;
elc1.chuV = mm - 20 * siop / d1.k[kkkk];
mm = mm - 20 * siop / d1.k[kkkk];
elc1.sjc = siop / d1.k[kkkk];
maso.put(s, elc1);
} else if (s.startsWith("S")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(15 * siop / d1.k[kkkk]);
elc1.ruV = mm;
elc1.chuV = mm - 15 * siop / d1.k[kkkk];
mm = mm - 15 * siop / d1.k[kkkk];
elc1.sjc = siop / d1.k[kkkk];
maso.put(s, elc1);
} else if (s.startsWith("P")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
elc1.ruV = mm;
if(elc1.ofopen.startsWith("cut")){
siop =0;
mm=0;
elc1.chuV = 0;
}
else
elc1.chuV = mm;
elc1.sjc = siop / d1.k[kkkk];
maso.put(s, elc1);
} else if (s.startsWith("M")) {
for (int cmd1 = 0; cmd1 < ddb.size(); cmd1++) {
if (ddb.get(cmd1) == null) continue;
Duobing dd = ddb.get(cmd1);
if (dd.s.equals(s)) {
search(s, maso, ddb, siop, d1.k[kkkk], zonglux, rui1);
}
}
}
}
}
else{
siop = 0;
for (Entry<String, Electric> c1 : d1.map.get(kkkk).entrySet()) {
rui1=mm;
parts8 = c1.getKey();
s = parts8;
cw=rui1;
if (s.startsWith("K")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
if(elc1.ofopen.startsWith("t")){
gg=1;
elc1.chuV=0;
}
else
elc1.chuV=cw;
if(cw!=0&&d1.k[kkkk]==0)
elc1.sjc=100;
else
elc1.sjc=0;
elc1.scV(gg,cw);
maso.put(s, elc1);
} else if (s.startsWith("H")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
if (elc1.xuhao == 3) {
yy = 1;
String jkj = "";
Pattern pattern = Pattern.compile("(.*).");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
jkj = matcher.group(1);
}
for (int d = 0; d < d1.map.size(); d++) {
for (Entry<String, Electric> ignored : d1.map.get(d).entrySet()) {
Electric elc2 = d1.map.get(d).get(jkj + 2);
if (elc2 != null){
yy = 2;
if (elc1.ofopen.startsWith("t")){
elc1.ofopen = "closed";
}
else{
elc1.ofopen = "turned on";
}
elc1.chuV1=cw;
maso.put(s, elc1);
break;
}
}
}
if (yy == 1) {
if (elc1.ofopen.startsWith("t")){
gg=1;
elc1.ofopen = "closed";
}
else{
elc1.ofopen = "turned on";
}
if(cw!=0&&d1.k[kkkk]==0)
elc1.sjc=100;
else
elc1.sjc=0;
elc1.scV(gg,cw);
elc1.chuV = 0;
elc1.chuV1 = cw;
maso.put(s, elc1);
}
}
else if (elc1.xuhao == 2) {
if(cw!=0&&d1.k[kkkk]==0)
elc1.sjc=100;
else
elc1.sjc=0;
elc1.scV(gg,cw);
String jkj = "";
Pattern pattern = Pattern.compile("(.*).");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
jkj = matcher.group(1);
}
for (int d = 0; d < d1.map.size(); d++) {
for (Entry<String, Electric> c2 : d1.map.get(d).entrySet()) {
Electric e = d1.map.get(d).get(jkj + 3);
if (e != null){
yy = 2;
e.sjc = elc1.sjc;
e.chuV=elc1.chuV;
}
}
}
if(elc1.ofopen.startsWith("t")){
elc1.ruV=0;
gg=1;
}
else
elc1.ruV=cw;
if(yy!=2){
elc1.chuV1=0;
maso.put(s, elc1);
}
}
} else if (s.startsWith("B")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
elc1.scV(gg,cw);
if(cw!=0&&d1.k[kkkk]==0)
elc1.sjc=100;
else
elc1.sjc=0;
maso.put(s, elc1);
zonglux = zonglux + elc1.getL();
} else if (s.startsWith("R")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
elc1.scV(gg,cw);
if(cw!=0&&d1.k[kkkk]==0)
elc1.sjc=100;
else
elc1.sjc=0;
maso.put(s, elc1);
zonglux = zonglux + elc1.getL();
} else if (s.startsWith("D")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
elc1.scV(gg,cw);
if(cw!=0&&d1.k[kkkk]==0)
elc1.sjc=100;
else
elc1.sjc=0;
maso.put(s, elc1);
} else if (s.startsWith("A")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
elc1.scV(gg,cw);
if(cw!=0&&d1.k[kkkk]==0)
elc1.sjc=100;
else
elc1.sjc=0;
maso.put(s, elc1);
} else if (s.startsWith("S")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
elc1.scV(gg,cw);
if(cw!=0&&d1.k[kkkk]==0)
elc1.sjc=100;
else
elc1.sjc=0;
maso.put(s, elc1);
} else if (s.startsWith("P")) {
Electric elc1 = d1.map.get(kkkk).get(parts8);
elc1.reshuV(siop);
elc1.scV(gg,cw);
if(elc1.ofopen.startsWith("cut")){
gg=1;
elc1.chuV = 0;
}
else
elc1.chuV=cw;
if(cw!=0&&d1.k[kkkk]==0)
elc1.sjc=100;
else
elc1.sjc=0;
maso.put(s, elc1);
} else if (s.startsWith("M")) {
for (int cmd1 = 0; cmd1 < ddb.size(); cmd1++) {
if (ddb.get(cmd1) == null) continue;
Duobing dd = ddb.get(cmd1);
if (dd.s.equals(s)) {
search(s, maso, ddb, siop, d1.k[kkkk], zonglux, rui1);
}
}
}
}
}
}
}
}
return new Fanhui(maso, zonglux, rui1);
}
}
總結:
這次作業相較於上一次的作業來說,新增二極體,以及輸出的相關要求,在輸出電器的同時,還要輸出其兩個端點的電勢。這個對我來說難度相當大,在圖書館裡面待了好幾天也沒有解決好這個問題。最後拿到的分數很少。感覺這次的題目很難,只拿到了36分,可能也是因為期末的原因,感覺花的時間也沒有之前得多。
3.採坑心得:
題目所給的測試樣例只是最終得到結果的一部分,還有一些測試點還需要自己慢慢去摸索,比如說在寫第六次大作業的時候,題目只給了三個測試樣例,還有很多測試點要一個一個去思考,比如什麼互斥開關的問題,以及二極體的正反問題,在輸出的時候注重每個電器的端點電壓等等,這幾次的題目讀題的時候感覺不是很難,就想著直接寫應該就可以寫出來,但是到了程式碼實現的時候就完全不一樣,感覺輸出的都有一點問題,尤其是有些地方在改動的時候,因為距離上一次的作業有個五六天,導致有些地方忘記了上次是怎麼寫的,然後在修改的時候總有一些地方對不上正確的答案,然後這些地方都花了很多的時間去修改。
4.改進建議:
每次寫題目,程式碼總會有很多的報錯,將程式碼放進Idea可以快速的解決相關的問題,但是寫題目的時候還是要認真的去對待,最後一次大作業因為期末的原因,有一點鬆懈,到作業快要結束的時候才開始認真的去思考去寫程式碼。題目比較長的時候,有時候無從下手,要把重點先放在建類上面,把每個類的屬性搞清楚,然後對題目的輸入進行分析,寫出相應的正規表示式獲取重要的資訊用ArrayList或者Map存起來,在輸出的時候注意輸出的順序。有些時候題目不會把所有的測試點都寫出來,要自己一個一個去想,要先把題目說的不要求的先刪去,然後注重一些細節,拿此次作業來說吧,我感覺難度大的就是電勢,物理沒有學好,主要是思考時間也沒有很多,就得分很少,以後寫題目就要認真的去對待,花多點時間去思考,不會的就去學。
5.總結:
1.題目所給的測試樣例只是最終得到結果的一部分,還有一些測試點還需要自己慢慢去摸索,要對題目瞭解清楚之後,在進行分析,才能知道如何去輸出,以什麼樣的關係去輸出,每一個類對應關係以及各自所代表的含義,題目確實很複雜,唯有沉下心去分析類的關係,才能把題目做好。
2.仔細閱讀作業指導,確保完全理解了題目的要求。
3.基於題目要求,分析需要哪些類和物件,以及它們之間的關係。這可能涉及到繼承、介面、多型等物件導向的概念。,正確分析是很重要的,比如說這次寫程式碼,可以較簡單的去儲存需要的資料,但是當時沒有想到,然後就很複雜的去儲存Map套Map套Map,這樣很麻煩,後面快寫完的時候發現可以簡單的去儲存
4.命名規範:使用清晰、有意義的變數和類名,遵循Java的命名規範。
5.程式碼結構:保持程式碼的整潔和模組化,使用適當的註釋來解釋複雜的邏輯。
6.程式碼複用:儘量複用之前寫過的程式碼,避免重複勞動。
|