7-2 家居强电电路模拟程序-2
分数 74
作者 蔡轲
单位 南昌航空大学
智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能。请根据如下要去设计一个智能家居强电电路模拟系统。以下题目介绍中加粗的部分为本次迭代在“家居强电电路模拟程序-1”的基础上增加的功能要求。
1、控制设备
本题模拟的控制设备包括:开关、分档调速器、连续调速器。
开关:包括0和1两种状态。
开关有两个引脚,任意一个引脚都可以是输入引脚,而另一个则是输出引脚。开关状态为0时,无论输入电位是多少,输出引脚电位为0。当开关状态为1时,输出引脚电位等于输入电位。
分档调速器
按档位调整,常见的有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 转/分钟。电压在[80,100)V 区间对应转速为 80 转/分 钟,[100-120)V 区间对应转速为 160 转/分钟,[120-140)V 区间对应转速为 260 转/分钟,超过 140V 转速 为 360 转/分钟(本次迭代暂不考虑电压超标的异常情况)输入信息:
本次迭代考虑电阻:白炽灯的电阻为 10,日光灯的电阻为 5,吊扇的电阻为 20,落 地扇的电阻为 20
3、输入信息
1)输入设备信息
分别用设备标识符K、F、L、B、R、D、A分别表示开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、落地扇。
设备标识用标识符+编号表示,如K1、F3、L2等。
引脚格式:设备标识-引脚编号,例如:K1-1标识编号为1的开关的输入引脚。
三种控制开关的输入引脚编号为1,输出引脚编号为2。
受控设备的两个引脚编号分别为1、2。
约束条件:
不同设备的编号可以相同。
同种设备的编号可以不连续。
设备信息不单独输入,包含在连接信息中。
2)输入连接信息
一条连接信息占一行,用[]表示一组连接在一起的设备引脚,引脚与引脚之间用英文空格" "分隔。
格式:“[”+引脚号+" “+…+” “+引脚号+”]"
例如:[K1-1 K3-2 D5-1]表示K1的输入引脚,K3的输出引脚,D5的1号引脚连接在一起。
约束条件:
不考虑调速器串联到其他调速器的情况。
不考虑调速器串联到其他调速器的情况。
考虑各类设备的并联接入。例如,K1 的输出接到 L2 的输入,L2 的输出再接其他设备属于串联接线。K1 的输出接到 L2 的输出,同时 K1 的输入接到 L2 的输入,这种情况属于并联。
本次迭代的连接信息不单独输入,包含在线路信息中。
3)输入控制设备调节信息
开关调节信息格式:
#+设备标识K+设备编号,例如:#K2,代表切换K2开关的状态。
分档调速器的调节信息格式:
#+设备标识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的一个部分,本题不考虑这种类型的输入,而是当将T1\T2的所有连接信息直接包含在T3中定义。
下次迭代中需要考虑这种类型的输入。
4、输出信息:
按开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、落地扇的顺序依次输出所有设备的状态或参数。每个设备一行。同类设备按编号顺序从小到大输出。
输出格式:@设备标识+设备编号+“:” +设备参数值(控制开关的档位或状态、灯的亮度、风扇的转速,只输出值,不输出单位)
连续调速器的档位信息保留两位小数,即使小数为0,依然显示两位小数.00。
开关状态为0(打开)时显示turned on,状态为1(合上)时显示closed
如:
@K1:turned on
@B1:190
@L1:0.60
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:建议设计类图
输入格式:
请在这里写输入格式。例如:输入在一行中给出2个绝对值不超过1000的整数A和B。
输出格式:
请在这里描述输出格式。例如:对每一组输入,在一行中输出A+B的值。
输入样例1:
在这里给出一组输入。例如:
#T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT]
#T2:[IN K2-1] [K2-2 D1-1] [D1-2 OUT]
#M1:[T1 T2]
#T3:[VCC L1-1] [L1-2 M1-IN] [M1-OUT D3-1] [D3-2 GND]
#K1
end
输出样例1:
在这里给出相应的输出。例如:
@K1:closed
@K2:turned on
@L1:0.00
@D1:0
@D2:0
@D3:0
输入样例2:
在这里给出一组输入。例如:
#T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT]
#T2:[IN K2-1] [K2-2 D1-1] [D1-2 OUT]
#M1:[T1 T2]
#T3:[VCC L1-1] [L1-2 M1-IN] [M1-OUT D3-1] [D3-2 GND]
#K1
#L1:1.00
end
输出样例2:
在这里给出相应的输出。例如:
@K1:closed
@K2:turned on
@L1:1.00
@D1:0
@D2:200
@D3:200
输入样例3:
在这里给出一组输入。例如:
#T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT]
#T2:[IN K2-1] [K2-2 D1-1] [D1-2 OUT]
#M1:[T1 T2]
#T3:[VCC L1-1] [L1-2 M1-IN] [M1-OUT D3-1] [D3-2 GND]
#K1
#K2
#L1:1.00
end
输出样例3:
在这里给出相应的输出。例如:
@K1:closed
@K2:closed
@L1:1.00
@D1:0
@D2:0
@D3:346
代码长度限制
40 KB
时间限制
1000 ms
内存限制
64 MB
栈限制
8192 KB
import java.util.LinkedHashMap;
import java.util.Map;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Comparator;
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 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 fanhui() {// 比较器用到的
if (s.equals("K"))
return 7;
else if (s.equals("F"))
return 6;
else if (s.equals("L"))
return 5;
else if (s.equals("B"))
return 4;
else if (s.equals("R"))
return 3;
else if (s.equals("D"))
return 2;
else if (s.equals("A"))
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;
}
}
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;
}
}
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 Bi extends Electric {
public Bi(String ml) {
super("M", ml);
}
}
class Chuan extends Electric{
public Chuan(String ml){
super("T",ml);
}
}
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);
}
}
int kllk = 0, mmm = 0;
String z1 = "", zm = "";
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));
}
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(" ");
if (parts4[1].equals("OUT"))
break;
else {
String[] pinyin = parts4[1].split("-");
String dkey = pinyin[0].trim();
map1 = complain(dkey, parts4[1], map1);
//System.out.println(dkey+" "+parts4[1]);
}
} else if (jk1.startsWith("[VCC")) {
vb2 = 1;
String[] parts4 = jk.split(" ");
if (parts4[1].equals("GND"))
break;
else {
String[] pinyin = parts4[1].split("-");
String dkey = pinyin[0].trim();
map1 = complain(dkey, parts4[1], map1);
//System.out.println(dkey+" "+parts4[1]);
}
}
}
if (vb1 == 1)
mac.put(zm, map1);// 并联电路
if (vb2 == 1) {
zhu = map1;// 主电路
}
}
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(" ");
for (int yq = 0; yq < partsl.length; yq++) {
for (Map.Entry<String, Map<String, Electric>> entry1 : mac.entrySet()) {
if (entry1.getKey().equals(partsl[yq])) {
maps.put(k11 + "" + yq, entry1.getValue());
}
}
}
}
//System.out.println(maps.size());
int flag = 0;
int flag1 = 0;
int flag2 = 0;
int lll = 0, mmm1 = 0;
double rui = 220;
for (i = 0; i < chw.size(); i++) {
String sid = chw.get(i);
for (Entry<String, Map<String, Electric>> entry : maps.entrySet()){
if (sid.startsWith("K")) {
//System.out.println("1");
String diu = sid.substring(0, 2);
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 = sid.substring(0, 2);
String vs = sid.substring(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);
// electric.reshuV(rui);
// rui = electric.shuV;
//System.out.println("");
break;
}
}
}
for (Entry<String, Electric> entry : zhu.entrySet()) {
if (sid.startsWith("K")) {
String diu = sid.substring(0, 2);
Electric electric = zhu.get(diu);
//electric.display();
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 = sid.substring(0, 2);
String vs = sid.substring(2);
Electric electric = zhu.get(diu);
if (electric != null) {
//System.out.println("1");
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 = zhu.get(diu);
if (electric != null) {
//System.out.println("1");
electric.regulate(vs);
// electric.reshuV(rui);
break;
}
}
}
}
double siop = rui;
double a[] = new double[maps.size()];// 算电阻
double b[] = new double[zhu.size()];
i = 0;
int hjh=0;
int iuy=0;
Map<String, Electric> osp = new HashMap<>();
for (Entry<String, Map<String, Electric>> entry : maps.entrySet()) {
flag = 0;
a[i] = 0;
for (Entry<String, Electric> entry1 : entry.getValue().entrySet()) {
if (entry1.getKey().startsWith("K")) {
if (entry1.getValue().ofopen.equals("turned on"))
flag = 1;
if(entry1.getValue().ofopen.equals("closed"))
hjh++;
}
}
if(hjh==entry.getValue().size())
a[i]=0;
if (flag == 1)
a[i] = -1;
else {
for (Entry<String, Electric> entry1 : entry.getValue().entrySet()) {
a[i] = a[i] + 1.0*entry1.getValue().resistance;
}
}
i++;
}
double lpl1=0;
double kapok=0;
for (i = 0; i < a.length; i++) {
if(a[i]==0){
lpl1=0;
break;
}
else{
if (a[i]==-1)
continue;
else {
kapok = 1.0 / a[i] + kapok;
lpl1=kapok;
}
}
}
b[0]=0;
for (Entry<String, Electric> entry : zhu.entrySet()) {
flag=0;
if (entry.getKey().startsWith("K")) {
if (entry.getValue().ofopen.equals("turned on")){
flag = 1;
}
if(flag==1){
b[0] = 0;break;
}
}
b[0] = b[0] + entry.getValue().resistance;
}
double chuanR, bingR;
chuanR = 1.0*b[0];
if (lpl1 == 0)
bingR = 0;
else
bingR = 1.0/lpl1;
double chuanV = 0, bingV = 0;
chuanV = rui * chuanR / (bingR + chuanR);
bingV = rui * bingR / (bingR + chuanR);
Map<String, Electric> maso = new HashMap<>();
for (Entry<String, Electric> entry : zhu.entrySet()) {
String parts8 = entry.getKey();
s = parts8;
if(b[0]==0&&flag==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("B")) {
//System.out.println(10*chuanV/chuanR);
Electric elc1 = zhu.get(parts8);
elc1.reshuV(10*chuanV/chuanR);
maso.put(s, elc1);
}
else if (s.startsWith("R")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(5*chuanV/chuanR);
maso.put(s, elc1);
}
else if (s.startsWith("D")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(20*chuanV/chuanR);
maso.put(s, elc1);
// System.out.println(elc1.shuV);
}
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);
//System.out.println(rui);
rui = elc1.shuV;
chuanV = rui * chuanR / (bingR + chuanR);
bingV = rui * bingR / (bingR + chuanR);
//System.out.println(chuanV+" "+bingV);
maso.put(s, elc1);
}
else if (s.startsWith("F")) {
Electric elc1 = zhu.get(parts8);
elc1.reshuV(rui);
rui=elc1.shuV;
//System.out.println(rui);
chuanV = rui * chuanR / (bingR + chuanR);
bingV = rui * bingR / (bingR + chuanR);
maso.put(s, elc1);
}
else if (s.startsWith("M")) {
i=0;
for (Entry<String, Map<String, Electric>> entry6 : maps.entrySet()) {
if(lpl1==0){
siop=0;
for (Entry<String, Electric> entry1 : osp.entrySet()) {
parts8 = entry1.getKey();
s = parts8;
if (s.startsWith("K")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
if (elc1.ofopen.startsWith("t")) {
siop = 0;
}
maso.put(s, elc1);
}
else if (s.startsWith("B")) {
//System.out.println(10*siop/a[i]);
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
// System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("R")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
maso.put(s, elc1);
}
else if (s.startsWith("D")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
//System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("A")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
// System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("L")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
siop = elc1.shuV;
maso.put(s, elc1);
}
else if (s.startsWith("F")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
siop = elc1.shuV;
maso.put(s, elc1);
}
}
}
siop = bingV;
osp = entry6.getValue();
if(a[i]!=-1){
for (Entry<String, Electric> entry1 : osp.entrySet()) {
parts8 = entry1.getKey();
s = parts8;
if (s.startsWith("K")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
if (elc1.ofopen.startsWith("t")) {
siop = 0;
}
//System.out.println(parts8);
maso.put(s, elc1);
//System.out.println(siop);
}
else if (s.startsWith("B")) {
//System.out.println(10*siop/a[i]);
Electric elc1 = osp.get(parts8);
elc1.reshuV(10*siop/a[i]);
// System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("R")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(5*siop/a[i]);
maso.put(s, elc1);
}
else if (s.startsWith("D")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(20*siop/a[i]);
//System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("A")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(20*siop/a[i]);
// System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("L")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
siop = elc1.shuV;
maso.put(s, elc1);
}
else if (s.startsWith("F")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
siop = elc1.shuV;
maso.put(s, elc1);
}
}
}
else {
siop=0;
for (Entry<String, Electric> entry1 : osp.entrySet()) {
parts8 = entry1.getKey();
s = parts8;
if (s.startsWith("K")) {
Electric elc1 = osp.get(parts8);
elc1.shuV=0;
maso.put(s, elc1);
}
else if (s.startsWith("B")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
// System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("R")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
maso.put(s, elc1);
}
else if (s.startsWith("D")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
//System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("A")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
//System.out.println(elc1.shuV);
maso.put(s, elc1);
}
else if (s.startsWith("L")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
siop = elc1.shuV;
maso.put(s, elc1);
}
else if (s.startsWith("F")) {
Electric elc1 = osp.get(parts8);
elc1.reshuV(siop);
siop = elc1.shuV;
maso.put(s, elc1);
}
}
}
i++;
}
}
}
ArrayList<Electric> arraylist6 = new ArrayList<>();
for (Map.Entry<String, Electric> pose : maso.entrySet()) {
arraylist6.add(pose.getValue());
}
Comparator<Electric> numberComparator = new Comparator<Electric>() {
public int compare(Electric o1, Electric o2) {
int a = o1.fanhui();
int b = o2.fanhui();
int c = Integer.parseInt(o1.id);
int d = Integer.parseInt(o2.id);
if (a > b)
return -1;
else if (a == b) {
if (c > d)
return 1;
else
return -1;
} else
return 1;
}
};
Collections.sort(arraylist6, numberComparator);
for (Electric suixcs : arraylist6) {
suixcs.display();
}
}
public static Map<String, Electric> complain(String dkey, String s, Map<String, Electric> map1) {
String jkj = String.valueOf(s.charAt(1));
if (s.startsWith("K")) {
Electric tric = new Kaiguan(jkj);
tric.resistance = 0;
map1.put(dkey, tric);
}
else if (s.startsWith("F")) {
Electric tric = new Fendang(jkj);
tric.resistance = 0;
map1.put(dkey, tric);
}
else if (s.startsWith("L")) {
Electric tric = new Lianxu(jkj);
tric.resistance = 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);
}
return map1;
}
}