一,前言
本次Blog是对题目集7-8的总结,正则表达式,类型转换,字符串处理,链表,以及例如Arraylist等包的知识,需要合理运用继承多态来设计类,需要对题目的逻辑过程,具体实现有充分的认知.特别是用map将类之间
联系起来对于逻辑的考验非常大.难度很大,在写代码之前要对实现的过程,思路充分完善,才利用代码的完成.
2,设计与分析
第七次题目集
7-1 家居强电电路模拟程序-3
智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能。请根据如下要去设计一个智能家居强电电路模拟系统。以下题目介绍中加粗的部分为本次迭代在“家居强电电路模拟程序-2”的基础上增加的功能要求。
依旧是之前题目集的迭代,在本次迭代中增加一个互斥开关,让题目变的更复杂,在之前的题目集中,是通过arraylist将数据存储,然后通过链表将电路连接信息连接起来,使过程相对麻烦,在本次题目集中,使用了map
将数据存储,再将所有用电器,控制设备继承电器主类,这样可以将数据更合理存储,更方便于数据的使用,然后就是要在写代码之前,必须在理清思路,对代码的实现过程要具体,要充分思考.在写完改进的时候,要充分活用
调试等方法.
源码如下:
点击查看代码
import java.text.DecimalFormat;
import java.util.*;
class Series extends Equipment{//串联
Map<String,Equipment> ser=new LinkedHashMap<>();
public Series(double number,double res,Map<String,Equipment> ser){
super(number,res);
this.ser=ser;
}
public double num(double a, double b) {
return 0;
}
}
class Parallel extends Equipment{//并联
Map<String,Series> par=new LinkedHashMap<>();
public Parallel(double number,double res,Map<String,Series> ser){
super(number,res);
this.par=ser;
}
public double num(double a,double b){
double r=0;
Set<Map.Entry<String, Series>> entries = par.entrySet();
for(Map.Entry<String, Series> entry: entries){
if(entry.getValue().number==0){
r+=1/entry.getValue().res;}
}
return 1/r;
}
}
class Equipment implements Comparable<Equipment>{
double number;//开关的开关,调压器的档数,用电器的亮度,转速
double res;//电阻
int sum=0;//编号
/*public Equipment() {
}*/
public Equipment(double number, double res){
this.number=number;
this.res=res;
}
@Override
public int compareTo(Equipment o) {
return this.sum-o.sum;
}
}
class Switch extends Equipment{//开关
public Switch(double number,double res){
super(number,res);
}
public static double num(double a, double b) {
return 0;
}
}
class Mutual extends Equipment{
public Mutual(double number,double res){
super(number,res);
}
public double num(double a, double b) {
return 0;
}
}
class Gears extends Equipment{//挡位变压器
public Gears(double number,double res){
super(number,res);
}
public static double num(double a,double b){
switch ((int) a) {
case 0 : a= 0;break;
case 1 : a=0.3;break;
case 2 : a=0.6;break;
case 3 : a=0.9;break;
default : a=0.9;break;
}
return a;
}
}
class Continu extends Equipment{//连续变压器
public Continu(double number,double res){
super(number,res);
}
public double num(double a, double b) {
return 0;
}
}
class Bulb extends Equipment{//日光灯
public Bulb(double number ){
super(number,10);
}
public static double num(double v,double b){
double number=0;
if(v<9){
number=0;
}
else{
number= (5*v+300)/7;
}
return number;
}
}
class Lamp extends Equipment{//白织灯
public Lamp(double number ){
super(number,5);
}
public static double num(double v,double b){
double number=0;
if(v==0){
number=0;
}else{
number=180;
}
return number;
}
}
class Fan extends Equipment{//风扇
public Fan(double number,double speed){
super(number,20);
}
public static double num(double v,double b){
double number=0;
if(v<80){
number=0;
}
if(v>150){
number=360;
}
else{
number=(4*v)-240;
}
return number;
}
}
class StandFan extends Equipment{//落地扇
public StandFan(double number,double speed){
super(number,20);
}
public static double num(double v,double b){
double number=0;
if(v<80){
number=0;
}
else if(v<100){
number=80;
}
else if(v<120){
number=160;
}
else if(v<140){
number=260;
}
else{
number=360;
}
return number;
}
}
class Curtain extends Equipment{
public Curtain(double number){
super(number,15);
}
public static double num(double lux,double v){
double number=0;
if(v>50){
if(lux<50){
number=1;
return number;
}
if(lux<100){
number=0.8;
return number;
}
if(lux<200){
number=0.6;
return number;
}
if(lux<300){
number=0.4;
return number;
}
if(lux<400){
number=0.2;
return number;
}
if(lux>=400){
number=0;
return number;
}
}else{
number=1;
}
return number;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String pi = scanner.nextLine();
double v=220;
Map<String,Equipment> ser=new LinkedHashMap<>();
List <Switch> k =new ArrayList<>();
List <Gears> f =new ArrayList<>();
List <Continu> l =new ArrayList<>();
List <Bulb> b =new ArrayList<>();
List <Lamp> r =new ArrayList<>();
List <Fan> d =new ArrayList<>();
List <StandFan> a =new ArrayList<>();
List<Curtain> c =new ArrayList<>();
List<Mutual> m =new ArrayList<>();
while(!pi.equals("end")){
if(pi.startsWith("#T")){
String Name=pi.substring(1,3);//串联电路名字
Map<String,Equipment> series=new LinkedHashMap<>();
double ress=0;//电阻和
String[] pis=pi.split(" ");
int number1=Integer.parseInt(pis[0].substring(2,3));
for(int i=1;i<pis.length;i++){
if(pis[i].startsWith("K")){//开关
Switch k1=new Switch(0,0);
k1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment kk=k1;
k.add(k1);
series.put(pis[i].substring(0,2),kk);
//System.out.println(k1.open);
}
if(pis[i].startsWith("F")){//分档调速器
Gears f1=new Gears(0,0);
f1.sum=Integer.parseInt(pis[2].substring(1,2));
Equipment ff=f1;
f.add(f1);
series.put(pis[i].substring(0,2),ff);
}
if(pis[i].startsWith("L")){//连续调速器
Continu l1=new Continu(0,0);
l1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment ll=l1;
l.add(l1);
series.put(pis[i].substring(0,2),ll);
}
if(pis[i].startsWith("B")){
Bulb b1=new Bulb(0);
b1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment bb=b1;
b.add(b1);
series.put(pis[i].substring(0,2),bb);
//System.out.println(pis[i].substring(0,2));
ress+=10;
}
if(pis[i].startsWith("R")){
Lamp r1=new Lamp(0);
r1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment lr=r1;
r.add(r1);
series.put(pis[i].substring(0,2),lr);
ress+=5;
}
if(pis[i].startsWith("D")){//风扇
Fan d1= new Fan(0,0);
d1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment df=d1;
d.add(d1);
series.put(pis[i].substring(0,2),df);
ress+=20;
}
if(pis[i].startsWith("A")){//落地扇
StandFan a1= new StandFan(0,0);
a1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment sa1=a1;
a.add(a1);
series.put(pis[i].substring(0,2),sa1);
ress+=20;
}
if(pis[i].startsWith("S")){
Curtain c1= new Curtain(0);
c1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment sc1=c1;
c.add(c1);
series.put(pis[i].substring(0,2),sc1);
ress+=15;
}
if(pis[i].startsWith("H")){
Mutual m1= new Mutual(0,0);
m1.sum=Integer.parseInt(pis[i].substring(1,2));
if(Integer.parseInt(pis[i].substring(3,4))==1){
if(Integer.parseInt(pis[i+1].substring(4,5))==2){//1,3接通 2,4断开
m1.number=1;
}else if(Integer.parseInt(pis[i+1].substring(4,5))==3){
m1.number=4;
}
}
if(Integer.parseInt(pis[i].substring(3,4))==2){
m1.number=1;
}
if(Integer.parseInt(pis[i].substring(3,4))==3){
m1.number=4;
}
Equipment mm=m1;
m.add(m1);
series.put(pis[i].substring(0,2),mm);
if(pi.substring(5,6).equals("V")){
if(m1.number==1){
ress+=5;
}
if(m1.number==4){
ress+=10;
}
}
}
if(pis[i].startsWith("M")){
Equipment n=null;
double res=0;
Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
for(Map.Entry<String, Equipment> entry : entries){
if(entry.getKey().equals(pis[i].substring(0,2))){
res=entry.getValue().res;
n=entry.getValue();
}
}
//Parallel par=new Parallel(0,res,map);
series.put(pis[i].substring(0,2),n);
}
}
Series ser1=new Series(0,ress,series);
ser.put(Name,ser1);
}
if(pi.startsWith("#M")){
String[] pis=pi.split(" ");
Map<String,Series> par=new LinkedHashMap<>();
String Name=pi.substring(1,3);
for(int i=0;i<pis.length;i++){
String con;
if(i==0){
con=pis[i].substring(5,7);
}else{
con=pis[i].substring(0,2);
}
Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
for(Map.Entry<String, Equipment> entry : entries){
if(entry.getKey().equals(con)){
par.put(entry.getKey(), (Series) entry.getValue());
}
}
}
double ress=0;
Parallel pa2=new Parallel(0,0,par);
ress= pa2.num(0,0);
pa2.res = ress;
ser.put(Name,pa2);
}
if(!pi.startsWith("#T")&&!pi.startsWith("#M")){
break;
}
pi=scanner.nextLine();
}//数据输入
while(!pi.equals("end")){
if(pi.startsWith("#K")){
for(int i=0;i<k.size();i++){
if(k.get(i).sum==Integer.parseInt(pi.substring(2,3))){
if(k.get(i).number==1){
k.get(i).number=0;
}
else{
k.get(i).number=1;
}
}
}
}
if(pi.startsWith("#F")){
for(int i=0;i<f.size();i++){
if(f.get(i).sum==Integer.parseInt(pi.substring(2,3))){
if(pi.substring(3).equals("+")){
if(f.get(i).number>=3){
}else{
f.get(i).number++;}
}
if(pi.substring(3).equals("-")){
if(f.get(i).number<=0){
}
else{
f.get(i).number--;}
}
}
}
}
if(pi.startsWith("#L")){
String[] pip=pi.split(":");
for(int i=0;i<l.size();i++){
if(l.get(i).sum==Integer.parseInt(pi.substring(2,3))){
// System.out.println(number);
l.get(0).number= Double.parseDouble(pip[1]);
}
}
}
if(pi.startsWith("#H")){
for(int i=0;i<m.size();i++){
if(m.get(i).sum==Integer.parseInt(pi.substring(2,3))){
if(m.get(i).number==2){
m.get(i).number=1;
}
if(m.get(i).number==1){
m.get(i).number=2;
}
if(m.get(i).number==3){
m.get(i).number=4;
}
if(m.get(i).number==4){
m.get(i).number=3;
}
}
}
}
pi=scanner.nextLine();
}
Set<Map.Entry<String, Equipment>> entries4 = ser.entrySet();
Iterator<Map.Entry<String, Equipment>> iterator1 = entries4.iterator();
Map.Entry<String, Equipment> lastEntry1 = null;
while(iterator1.hasNext()){
Map.Entry<String, Equipment> entry2 = iterator1.next();
if(!iterator1.hasNext()){
lastEntry1 = entry2;
}
}
if(lastEntry1!=null){
Series Ser=(Series) lastEntry1.getValue();
Set<Map.Entry<String, Equipment>> entries = Ser.ser.entrySet();
for(Map.Entry<String, Equipment> entry : entries){
if(entry.getKey().startsWith("F")){
v*=Gears.num(entry.getValue().number,0);
}
if(entry.getKey().startsWith("L")){
v*=entry.getValue().number;
}
if(entry.getKey().startsWith("K")){
if(entry.getValue().number==0){
v=0;
}
}
if(entry.getKey().startsWith("M")){
Parallel Pa=(Parallel) entry.getValue();
Set<Map.Entry<String, Series>> entries1 = Pa.par.entrySet();
for(Map.Entry<String, Series> entry2 : entries1){
Set<Map.Entry<String, Equipment>> entries2 = entry2.getValue().ser.entrySet();
for(Map.Entry<String, Equipment> entry3 : entries2){
if(entry3.getKey().startsWith("K")){
if(entry3.getValue().number==0){
entry2.getValue().number=1;
}
}
if(entry3.getKey().startsWith("H")){
if(entry3.getValue().number==2){
entry2.getValue().number=1;
}
if(entry3.getValue().number==1){
entry2.getValue().res+=5;
}
if(entry3.getValue().number==3){
entry2.getValue().res-=10;
}
if(entry3.getValue().number==4){
entry2.getValue().number=1;
}
}
}
}
Pa.res=Pa.num(0,0);
lastEntry1.getValue().res+=Pa.res;
}
}
}
Set<Map.Entry<String, Equipment>> entries5 = ser.entrySet();
Iterator<Map.Entry<String, Equipment>> iterator2 = entries5.iterator();
Map.Entry<String, Equipment> lastEntry2 = null;
while(iterator2.hasNext()){
Map.Entry<String, Equipment> entry2 = iterator2.next();
if(!iterator2.hasNext()){
lastEntry2 = entry2;
}
}
double lux=0;
if(lastEntry2!=null){
Series Ser=(Series) lastEntry2.getValue();
double I=v/lastEntry2.getValue().res;
Set<Map.Entry<String, Equipment>> entries = Ser.ser.entrySet();
for(Map.Entry<String, Equipment> entry : entries){
if(entry.getKey().startsWith("B")){
entry.getValue().number= Bulb.num(I*entry.getValue().res,0);
lux+=entry.getValue().number;
}
if(entry.getKey().startsWith("R")){
entry.getValue().number= Lamp.num(I*entry.getValue().res,0);
lux+=entry.getValue().number;
}
if(entry.getKey().startsWith("D")){
entry.getValue().number= Fan.num(I*entry.getValue().res,0);
}
if(entry.getKey().startsWith("A")){
entry.getValue().number= StandFan.num(I*entry.getValue().res,0);
}
if(entry.getKey().startsWith("S")){
entry.getValue().number= I*entry.getValue().res;
}
if(entry.getKey().startsWith("M")){
Parallel Pa=(Parallel) entry.getValue();
double V=I*Pa.res;
Set<Map.Entry<String, Series>> entries1 = Pa.par.entrySet();
for(Map.Entry<String, Series> entry2 : entries1){
if(entry2.getValue().number==1){
continue;
}
double i=V/entry2.getValue().res;
Set<Map.Entry<String, Equipment>> entries2 = entry2.getValue().ser.entrySet();
for(Map.Entry<String, Equipment> entry3 : entries2){
if(entry3.getKey().startsWith("B")){
entry3.getValue().number= Bulb.num(i*entry3.getValue().res,0);
lux+=entry3.getValue().number;
}
if(entry3.getKey().startsWith("R")){
entry3.getValue().number= Lamp.num(i*entry3.getValue().res,0);
lux+=entry3.getValue().number;
}
if(entry3.getKey().startsWith("D")){
entry3.getValue().number= Fan.num(i*entry3.getValue().res,0);
}
if(entry3.getKey().startsWith("A")){
entry3.getValue().number= StandFan.num(i*entry3.getValue().res,0);
}
if(entry3.getKey().startsWith("S")){
entry3.getValue().number= i*entry3.getValue().res;
}
}
}
}
}
}
// Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
// Iterator<Map.Entry<String, Equipment>> iterator = entries.iterator();
//
// Map.Entry<String,Equipment> lastEntry = null;
//
// while(iterator.hasNext()) {
// Map.Entry<String, Equipment> entry = iterator.next();
// if (!iterator.hasNext()) { // 判断是否为最后一个键值对
// lastEntry = entry;
// }
// }
//if(lastEntry != null){
// Series ser1=(Series) lastEntry.getValue();
// System.out.println("串联电路名字"+lastEntry.getKey());
// System.out.println("串联电路总电阻"+lastEntry.getValue().res);
// Set<Map.Entry<String, Equipment>> entries1 = ser1.ser.entrySet();
//
//
// for(Map.Entry<String, Equipment> entry : entries1){
// System.out.println("用电器名字"+entry.getKey());
// if(entry.getKey().startsWith("M")){
// Parallel pa=(Parallel) entry.getValue();
// System.out.println("并联总电阻"+pa.res);
// Set<Map.Entry<String, Series>> entries2 = pa.par.entrySet();
// for (Map.Entry<String, Series> ignored : entries2){
//
//
// System.out.println("并联支路名字"+ignored.getKey());
// System.out.println("支路总电阻"+ignored.getValue().res);
// System.out.println(ignored.getValue().number);
// Set<Map.Entry<String, Equipment>> entries3 = ignored.getValue().ser.entrySet();
// for (Map.Entry<String, Equipment> ignored1 : entries3){
// System.out.println("支路用电器"+ignored1.getKey());
// System.out.println("支路用电器电阻"+ignored1.getValue().res);
// System.out.println("支路用电器数据"+ignored1.getValue().number);
// }
// }
// }else{
// System.out.println("用电器数据"+entry.getValue().number);
// System.out.println("用电器电阻"+entry.getValue().res);
// }
// System.out.println(" ");
// }
//}
Collections.sort(k);
Collections.sort(f);
Collections.sort(l);
Collections.sort(b);
Collections.sort(r);
Collections.sort(d);
Collections.sort(a);
Collections.sort(c);
Collections.sort(m);
for(int i=0;i<k.size();i++){
if(k.get(i).number==1){
System.out.println("@K"+k.get(i).sum+":closed");
}
else{
System.out.println("@K"+k.get(i).sum+":turned on");
v=0;
}
}
for(int i=0;i<f.size();i++){
System.out.println("@F"+f.get(i).sum+":"+f.get(i).number);
}
for(int i=0;i<l.size();i++){
DecimalFormat df = new DecimalFormat("0.00");
System.out.println("@L"+l.get(i).sum+":"+df.format(l.get(i).number));
}
for(int i=0;i<b.size();i++){
System.out.println("@B"+b.get(i).sum+":"+(int)Math.floor(b.get(i).number));
}
for(int i=0;i<r.size();i++){
System.out.println("@R"+r.get(i).sum+":"+(int)Math.floor(r.get(i).number));
}
for(int i=0;i<d.size();i++){
System.out.println("@D"+d.get(i).sum+":"+(int)Math.floor(d.get(i).number));
}
for(int i=0;i<a.size();i++){
System.out.println("@A"+a.get(i).sum+":"+(int)Math.floor(a.get(i).number));
}
for(int i=0;i<m.size();i++){
if(m.get(i).number==1){
System.out.println("@H"+m.get(i).sum+":closed");
}
if(m.get(i).number==2){
System.out.println("@H"+m.get(i).sum+":turned on");
}
}
for(int i=0;i<c.size();i++){
System.out.println("@S"+c.get(i).sum+":"+(int)Math.floor(Curtain.num(lux,c.get(i).number)*100)+"%");
}
}
}
这是电路迭代的最终版本,在本次迭代中,使并联中有再并联的可能,让对过程的处理变得很复杂,以及短路检测和最大电流限制.
源码如下:
点击查看代码
import java.text.DecimalFormat;
import java.util.*;
class Series extends Equipment{//串联
Map<String,Equipment> ser=new LinkedHashMap<>();
public Series(double number,double res,Map<String,Equipment> ser){
super(number,res);
this.ser=ser;
}
public double num(double a, double b) {
return 0;
}
}
class Parallel extends Equipment{//并联
Map<String,Series> par=new LinkedHashMap<>();
public Parallel(double number,double res,Map<String,Series> ser){
super(number,res);
this.par=ser;
}
public double num(double a,double b){
double r=0;
Set<Map.Entry<String, Series>> entries = par.entrySet();
for(Map.Entry<String, Series> entry: entries){
if(entry.getValue().number==0){
r+=1/entry.getValue().res;}
}
return 1/r;
}
}
class Equipment implements Comparable<Equipment>{
double number;//开关的开关,调压器的档数,用电器的亮度,转速
double res;//电阻
int sum=0;//编号
/*public Equipment() {
}*/
public Equipment(double number, double res){
this.number=number;
this.res=res;
}
@Override
public int compareTo(Equipment o) {
return this.sum-o.sum;
}
}
class Switch extends Equipment{//开关
public Switch(double number,double res){
super(number,res);
}
public static double num(double a, double b) {
return 0;
}
}
class Mutual extends Equipment{
public Mutual(double number,double res){
super(number,res);
}
public double num(double a, double b) {
return 0;
}
}
class Gears extends Equipment{//挡位变压器
public Gears(double number,double res){
super(number,res);
}
public static double num(double a,double b){
switch ((int) a) {
case 0 : a= 0;break;
case 1 : a=0.3;break;
case 2 : a=0.6;break;
case 3 : a=0.9;break;
default : a=0.9;break;
}
return a;
}
}
class Continu extends Equipment{//连续变压器
public Continu(double number,double res){
super(number,res);
}
public double num(double a, double b) {
return 0;
}
}
class Bulb extends Equipment{//日光灯
public Bulb(double number ){
super(number,10);
}
public static double num(double v,double b){
double number=0;
if(v<9){
number=0;
}
else{
number= (5*v+300)/7;
}
return number;
}
}
class Lamp extends Equipment{//白织灯
public Lamp(double number ){
super(number,5);
}
public static double num(double v,double b){
double number=0;
if(v==0){
number=0;
}else{
number=180;
}
return number;
}
}
class Fan extends Equipment{//风扇
public Fan(double number,double speed){
super(number,20);
}
public static double num(double v,double b){
double number=0;
if(v<80){
number=0;
}
if(v>150){
number=360;
}
else{
number=(4*v)-240;
}
return number;
}
}
class StandFan extends Equipment{//落地扇
public StandFan(double number,double speed){
super(number,20);
}
public static double num(double v,double b){
double number=0;
if(v<80){
number=0;
}
else if(v<100){
number=80;
}
else if(v<120){
number=160;
}
else if(v<140){
number=260;
}
else{
number=360;
}
return number;
}
}
class Curtain extends Equipment{
public Curtain(double number){
super(number,15);
}
public static double num(double lux,double v){
double number=0;
if(v>50){
if(lux<50){
number=1;
return number;
}
if(lux<100){
number=0.8;
return number;
}
if(lux<200){
number=0.6;
return number;
}
if(lux<300){
number=0.4;
return number;
}
if(lux<400){
number=0.2;
return number;
}
if(lux>=400){
number=0;
return number;
}
}else{
number=1;
}
return number;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String pi = scanner.nextLine();
double v=220;
Map<String,Equipment> ser=new LinkedHashMap<>();
List <Switch> k =new ArrayList<>();
List <Gears> f =new ArrayList<>();
List <Continu> l =new ArrayList<>();
List <Bulb> b =new ArrayList<>();
List <Lamp> r =new ArrayList<>();
List <Fan> d =new ArrayList<>();
List <StandFan> a =new ArrayList<>();
List<Curtain> c =new ArrayList<>();
List<Mutual> m =new ArrayList<>();
while(!pi.equals("end")){
if(pi.startsWith("#T")){
String Name=pi.substring(1,3);//串联电路名字
Map<String,Equipment> series=new LinkedHashMap<>();
double ress=0;//电阻和
String[] pis=pi.split(" ");
int number1=Integer.parseInt(pis[0].substring(2,3));
for(int i=1;i<pis.length;i++){
if(pis[i].startsWith("K")){//开关
Switch k1=new Switch(0,0);
k1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment kk=k1;
k.add(k1);
series.put(pis[i].substring(0,2),kk);
//System.out.println(k1.open);
}
if(pis[i].startsWith("F")){//分档调速器
Gears f1=new Gears(0,0);
f1.sum=Integer.parseInt(pis[2].substring(1,2));
Equipment ff=f1;
f.add(f1);
series.put(pis[i].substring(0,2),ff);
}
if(pis[i].startsWith("L")){//连续调速器
Continu l1=new Continu(0,0);
l1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment ll=l1;
l.add(l1);
series.put(pis[i].substring(0,2),ll);
}
if(pis[i].startsWith("B")){
Bulb b1=new Bulb(0);
b1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment bb=b1;
b.add(b1);
series.put(pis[i].substring(0,2),bb);
//System.out.println(pis[i].substring(0,2));
ress+=10;
}
if(pis[i].startsWith("R")){
Lamp r1=new Lamp(0);
r1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment lr=r1;
r.add(r1);
series.put(pis[i].substring(0,2),lr);
ress+=5;
}
if(pis[i].startsWith("D")){//风扇
Fan d1= new Fan(0,0);
d1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment df=d1;
d.add(d1);
series.put(pis[i].substring(0,2),df);
ress+=20;
}
if(pis[i].startsWith("A")){//落地扇
StandFan a1= new StandFan(0,0);
a1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment sa1=a1;
a.add(a1);
series.put(pis[i].substring(0,2),sa1);
ress+=20;
}
if(pis[i].startsWith("S")){
Curtain c1= new Curtain(0);
c1.sum=Integer.parseInt(pis[i].substring(1,2));
Equipment sc1=c1;
c.add(c1);
series.put(pis[i].substring(0,2),sc1);
ress+=15;
}
if(pis[i].startsWith("H")){
Mutual m1= new Mutual(0,0);
m1.sum=Integer.parseInt(pis[i].substring(1,2));
if(Integer.parseInt(pis[i].substring(3,4))==1){
if(Integer.parseInt(pis[i+1].substring(4,5))==2){//1,3接通 2,4断开
m1.number=1;
}else if(Integer.parseInt(pis[i+1].substring(4,5))==3){
m1.number=4;
}
}
if(Integer.parseInt(pis[i].substring(3,4))==2){
m1.number=1;
}
if(Integer.parseInt(pis[i].substring(3,4))==3){
m1.number=4;
}
Equipment mm=m1;
m.add(m1);
series.put(pis[i].substring(0,2),mm);
if(pi.substring(5,6).equals("V")){
if(m1.number==1){
ress+=5;
}
if(m1.number==4){
ress+=10;
}
}
}
if(pis[i].startsWith("M")){
Equipment n=null;
double res=0;
Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
for(Map.Entry<String, Equipment> entry : entries){
if(entry.getKey().equals(pis[i].substring(0,2))){
res=entry.getValue().res;
n=entry.getValue();
}
}
//Parallel par=new Parallel(0,res,map);
series.put(pis[i].substring(0,2),n);
}
}
Series ser1=new Series(0,ress,series);
ser.put(Name,ser1);
}
if(pi.startsWith("#M")){
String[] pis=pi.split(" ");
Map<String,Series> par=new LinkedHashMap<>();
String Name=pi.substring(1,3);
for(int i=0;i<pis.length;i++){
String con;
if(i==0){
con=pis[i].substring(5,7);
}else{
con=pis[i].substring(0,2);
}
Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
for(Map.Entry<String, Equipment> entry : entries){
if(entry.getKey().equals(con)){
par.put(entry.getKey(), (Series) entry.getValue());
}
}
}
double ress=0;
Parallel pa2=new Parallel(0,0,par);
ress= pa2.num(0,0);
pa2.res = ress;
ser.put(Name,pa2);
}
if(!pi.startsWith("#T")&&!pi.startsWith("#M")){
break;
}
pi=scanner.nextLine();
}//数据输入
while(!pi.equals("end")){
if(pi.startsWith("#K")){
for(int i=0;i<k.size();i++){
if(k.get(i).sum==Integer.parseInt(pi.substring(2,3))){
if(k.get(i).number==1){
k.get(i).number=0;
}
else{
k.get(i).number=1;
}
}
}
}
if(pi.startsWith("#F")){
for(int i=0;i<f.size();i++){
if(f.get(i).sum==Integer.parseInt(pi.substring(2,3))){
if(pi.substring(3).equals("+")){
if(f.get(i).number>=3){
}else{
f.get(i).number++;}
}
if(pi.substring(3).equals("-")){
if(f.get(i).number<=0){
}
else{
f.get(i).number--;}
}
}
}
}
if(pi.startsWith("#L")){
String[] pip=pi.split(":");
for(int i=0;i<l.size();i++){
if(l.get(i).sum==Integer.parseInt(pi.substring(2,3))){
// System.out.println(number);
l.get(0).number= Double.parseDouble(pip[1]);
}
}
}
if(pi.startsWith("#H")){
for(int i=0;i<m.size();i++){
if(m.get(i).sum==Integer.parseInt(pi.substring(2,3))){
if(m.get(i).number==2){
m.get(i).number=1;
}
if(m.get(i).number==1){
m.get(i).number=2;
}
if(m.get(i).number==3){
m.get(i).number=4;
}
if(m.get(i).number==4){
m.get(i).number=3;
}
}
}
}
pi=scanner.nextLine();
}
Set<Map.Entry<String, Equipment>> entries4 = ser.entrySet();
Iterator<Map.Entry<String, Equipment>> iterator1 = entries4.iterator();
Map.Entry<String, Equipment> lastEntry1 = null;
while(iterator1.hasNext()){
Map.Entry<String, Equipment> entry2 = iterator1.next();
if(!iterator1.hasNext()){
lastEntry1 = entry2;
}
}
if(lastEntry1!=null){
Series Ser=(Series) lastEntry1.getValue();
Set<Map.Entry<String, Equipment>> entries = Ser.ser.entrySet();
for(Map.Entry<String, Equipment> entry : entries){
if(entry.getKey().startsWith("F")){
v*=Gears.num(entry.getValue().number,0);
}
if(entry.getKey().startsWith("L")){
v*=entry.getValue().number;
}
if(entry.getKey().startsWith("K")){
if(entry.getValue().number==0){
v=0;
}
}
if(entry.getKey().startsWith("M")){
Parallel Pa=(Parallel) entry.getValue();
Set<Map.Entry<String, Series>> entries1 = Pa.par.entrySet();
for(Map.Entry<String, Series> entry2 : entries1){
Set<Map.Entry<String, Equipment>> entries2 = entry2.getValue().ser.entrySet();
for(Map.Entry<String, Equipment> entry3 : entries2){
if(entry3.getKey().startsWith("K")){
if(entry3.getValue().number==0){
entry2.getValue().number=1;
}
}
if(entry3.getKey().startsWith("H")){
if(entry3.getValue().number==2){
entry2.getValue().number=1;
}
if(entry3.getValue().number==1){
entry2.getValue().res+=5;
}
if(entry3.getValue().number==3){
entry2.getValue().res-=10;
}
if(entry3.getValue().number==4){
entry2.getValue().number=1;
}
}
}
}
Pa.res=Pa.num(0,0);
lastEntry1.getValue().res+=Pa.res;
}
}
}
Set<Map.Entry<String, Equipment>> entries5 = ser.entrySet();
Iterator<Map.Entry<String, Equipment>> iterator2 = entries5.iterator();
Map.Entry<String, Equipment> lastEntry2 = null;
while(iterator2.hasNext()){
Map.Entry<String, Equipment> entry2 = iterator2.next();
if(!iterator2.hasNext()){
lastEntry2 = entry2;
}
}
double lux=0;
if(lastEntry2!=null){
Series Ser=(Series) lastEntry2.getValue();
double I=v/lastEntry2.getValue().res;
Set<Map.Entry<String, Equipment>> entries = Ser.ser.entrySet();
for(Map.Entry<String, Equipment> entry : entries){
if(entry.getKey().startsWith("B")){
entry.getValue().number= Bulb.num(I*entry.getValue().res,0);
lux+=entry.getValue().number;
}
if(entry.getKey().startsWith("R")){
entry.getValue().number= Lamp.num(I*entry.getValue().res,0);
lux+=entry.getValue().number;
}
if(entry.getKey().startsWith("D")){
entry.getValue().number= Fan.num(I*entry.getValue().res,0);
}
if(entry.getKey().startsWith("A")){
entry.getValue().number= StandFan.num(I*entry.getValue().res,0);
}
if(entry.getKey().startsWith("S")){
entry.getValue().number= I*entry.getValue().res;
}
if(entry.getKey().startsWith("M")){
Parallel Pa=(Parallel) entry.getValue();
double V=I*Pa.res;
Set<Map.Entry<String, Series>> entries1 = Pa.par.entrySet();
for(Map.Entry<String, Series> entry2 : entries1){
if(entry2.getValue().number==1){
continue;
}
double i=V/entry2.getValue().res;
Set<Map.Entry<String, Equipment>> entries2 = entry2.getValue().ser.entrySet();
for(Map.Entry<String, Equipment> entry3 : entries2){
if(entry3.getKey().startsWith("B")){
entry3.getValue().number= Bulb.num(i*entry3.getValue().res,0);
lux+=entry3.getValue().number;
}
if(entry3.getKey().startsWith("R")){
entry3.getValue().number= Lamp.num(i*entry3.getValue().res,0);
lux+=entry3.getValue().number;
}
if(entry3.getKey().startsWith("D")){
entry3.getValue().number= Fan.num(i*entry3.getValue().res,0);
}
if(entry3.getKey().startsWith("A")){
entry3.getValue().number= StandFan.num(i*entry3.getValue().res,0);
}
if(entry3.getKey().startsWith("S")){
entry3.getValue().number= i*entry3.getValue().res;
}
}
}
}
}
}
// Set<Map.Entry<String, Equipment>> entries = ser.entrySet();
// Iterator<Map.Entry<String, Equipment>> iterator = entries.iterator();
//
// Map.Entry<String,Equipment> lastEntry = null;
//
// while(iterator.hasNext()) {
// Map.Entry<String, Equipment> entry = iterator.next();
// if (!iterator.hasNext()) { // 判断是否为最后一个键值对
// lastEntry = entry;
// }
// }
//if(lastEntry != null){
// Series ser1=(Series) lastEntry.getValue();
// System.out.println("串联电路名字"+lastEntry.getKey());
// System.out.println("串联电路总电阻"+lastEntry.getValue().res);
// Set<Map.Entry<String, Equipment>> entries1 = ser1.ser.entrySet();
//
//
// for(Map.Entry<String, Equipment> entry : entries1){
// System.out.println("用电器名字"+entry.getKey());
// if(entry.getKey().startsWith("M")){
// Parallel pa=(Parallel) entry.getValue();
// System.out.println("并联总电阻"+pa.res);
// Set<Map.Entry<String, Series>> entries2 = pa.par.entrySet();
// for (Map.Entry<String, Series> ignored : entries2){
//
//
// System.out.println("并联支路名字"+ignored.getKey());
// System.out.println("支路总电阻"+ignored.getValue().res);
// System.out.println(ignored.getValue().number);
// Set<Map.Entry<String, Equipment>> entries3 = ignored.getValue().ser.entrySet();
// for (Map.Entry<String, Equipment> ignored1 : entries3){
// System.out.println("支路用电器"+ignored1.getKey());
// System.out.println("支路用电器电阻"+ignored1.getValue().res);
// System.out.println("支路用电器数据"+ignored1.getValue().number);
// }
// }
// }else{
// System.out.println("用电器数据"+entry.getValue().number);
// System.out.println("用电器电阻"+entry.getValue().res);
// }
// System.out.println(" ");
// }
//}
Collections.sort(k);
Collections.sort(f);
Collections.sort(l);
Collections.sort(b);
Collections.sort(r);
Collections.sort(d);
Collections.sort(a);
Collections.sort(c);
Collections.sort(m);
for(int i=0;i<k.size();i++){
if(k.get(i).number==1){
System.out.println("@K"+k.get(i).sum+":closed");
}
else{
System.out.println("@K"+k.get(i).sum+":turned on");
v=0;
}
}
for(int i=0;i<f.size();i++){
System.out.println("@F"+f.get(i).sum+":"+f.get(i).number);
}
for(int i=0;i<l.size();i++){
DecimalFormat df = new DecimalFormat("0.00");
System.out.println("@L"+l.get(i).sum+":"+df.format(l.get(i).number));
}
for(int i=0;i<b.size();i++){
System.out.println("@B"+b.get(i).sum+":"+(int)Math.floor(b.get(i).number));
}
for(int i=0;i<r.size();i++){
System.out.println("@R"+r.get(i).sum+":"+(int)Math.floor(r.get(i).number));
}
for(int i=0;i<d.size();i++){
System.out.println("@D"+d.get(i).sum+":"+(int)Math.floor(d.get(i).number));
}
for(int i=0;i<a.size();i++){
System.out.println("@A"+a.get(i).sum+":"+(int)Math.floor(a.get(i).number));
}
for(int i=0;i<m.size();i++){
if(m.get(i).number==1){
System.out.println("@H"+m.get(i).sum+":closed");
}
if(m.get(i).number==2){
System.out.println("@H"+m.get(i).sum+":turned on");
}
}
for(int i=0;i<c.size();i++){
System.out.println("@S"+c.get(i).sum+":"+(int)Math.floor(Curtain.num(lux,c.get(i).number)*100)+"%");
}
}
}