关于nchu题目集7~8的总结

news/2024/7/7 4:08:29/文章来源:https://www.cnblogs.com/lyrin253/p/18276204

关于nchu题目集7~8的总结

一、前言

总结两次题目集的题目的知识点、题量、难度等情况

二、内容

  • [题目[1]](##第三次题目(简略版))
  • [代码[2]](##我的代码)
  • [设计与分析[3]](##设计与分析)
  • [踩坑心得[4]](##踩坑心得)
  • [改进建议[5]](##改进建议)

题目集8最后一题(简略版)

1、控制设备

本题模拟的控制设备包括:开关、分档调速器、连续调速器、互斥开关

开关:包括0和1两种状态

互斥开关:互斥开关有3个引脚:1个是汇总引脚,另两个是分支引脚。互斥开关只有两种状态:开关接往上面的2号引脚、接往下面的3号引脚。开关每次只能接通其中一个分支引脚,而另一个分支引脚处于断开状态。互斥开关的默认状态为1、2引脚接通,1、3引脚断开。

为避免短路,互斥开关设置了限流电阻,12引脚之间默认电阻为5,13引脚之间默认电阻为10。

分档调速器:按档位调整,常见的有3档、4档、5档调速器,档位值从0档-2(3/4)档变化。本次迭代模拟4档调速器,每个档位的输出电位分别为0、0.3、0.6、0.9倍的输入电压。

连续调速器没有固定档位,按位置比例得到档位参数,数值范围在[0.00-1.00]之间,含两位小数。输出电位为档位参数乘以输入电压。

当输入电位为0时,输出引脚输出的电位固定为0,不受各类开关调节的影响。

开关、调速器的初始状态/档位为0。

开关、调速器的输入引脚编号为1,输出引脚编号为2。
除互斥开关外,其他控制设备的电阻为 0。

互斥开关有3个引脚:1个是汇总引脚,另两个是分支引脚。

2、受控设备

本题模拟的受控设备包括:灯、风扇。两种设备都有两根引脚,通过两根引脚电压的电压差驱动设备工作。

本次迭代模拟两种灯具。

白炽灯;

日光灯;

本次迭代模拟两种风扇。

吊扇;

落地扇;

本次迭代模拟一种受控窗帘:

受控串联的电路符号为S,其最低工作电压为50V,电压达到或超过50V,窗帘即可正常工作,不考虑室外光照强度和室内空间大小等因素,窗帘受室内灯光的光照强度控制。

受控设备电阻:白炽灯的电阻为 10,日光灯的电阻为 5,吊扇的电阻为 20,落地扇的电阻为 20,窗帘电阻为15

3、输入信息

1)输入设备信息

分别用设备标识符K、F、L、B、R、D、A、H、S分别表示开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、落地扇、互斥开关、受控窗帘。

引脚格式:设备标识-引脚编号,例如:K1-1标识编号为1的开关的输入引脚。

约束条件:不同设备的编号可以相同。
同种设备的编号可以不连续。

设备信息不单独输入,包含在连接信息中。

2)输入连接信息

一条连接信息占一行,用[]表示一组连接在一起的设备引脚,引脚与引脚之间用英文空格" "分隔。

约束条件:不考虑调速器串联到其他调速器的情况。
不考虑调速器串联到其他调速器的情况。

考虑各类设备的并联接入。例如,K1 的输出接到 L2 的输入,L2 的输出再接其他设备属于串联接线。K1 的输出接到 L2 的输出,同时 K1 的输入接到 L2 的输入,这种情况属于并联。

本次迭代的连接信息不单独输入,包含在线路信息中。

3)输入控制设备调节信息

开关、互斥开关调节信息格式:

分档调速器的调节信息格式:

连续调速器的调节信息格式:

4)电源接地标识:

VCC,电压220V,GND,电压0V。没有接线的引脚默认接地,电压为0V。

5)输入串联电路信息

一条串联电路占一行,串联电路由按从靠电源端到接地端顺序依次输入的 n 个连接 信息组成,连接信息之间用英文空格" "分隔。

约束条件:不同的串联电路信息编号不同。

输入的最后一条电路信息必定是总电路信息,总电路信息的起始引脚是 VCC,结束引脚是 GND。

6)输入并联电路信息

一条并联电路占一行,并联电路由其包含的几条串联电路组成,串联电路标识之间用英文空格" "分隔。

格式:

约束条件:本次迭代不考虑并联电路中包含并联电路的情况。

本题不考虑输入电压或电压差超过220V的情况。

输入信息以end为结束标志,忽略end之后的输入信息。

本题中的并联信息所包含的串联电路的信息都在并联信息之前输入,不考虑乱序输入的情况。
只要不因短路而造成无穷大的电流烧坏电路(如电路中的部分短接),都是合理情况,在测试点的考虑范围之内。会造成无穷大的电流的短路本次迭代不考虑。

本次迭代考虑多个并联电路串联在一起的情况。

**本题考虑一条串联电路中包含其他串联电路的情况。

4、输出信息:

按开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、互斥开关、受控窗帘的顺序依次输出所有设备的状态或参数。每个设备一行。同类设备按编号顺序从小到大输出。

互斥开关显示1、2引脚的接通状态,接通时显示closed,断开时显示turned on。

5、家居电路模拟系列所有题目的默认规则:**

1)当计算电压值等数值的过程中,最终结果出现小数时,用截尾规则去掉小数部分,只保留整数部分。为避免精度的误差,所有有可能出现小数的数值用double类型保存并计算,不要作下转型数据类型转换,例如电压、转速、亮度等,只有在最后输出时再把计算结果按截尾规则,舍弃尾数,保留整数输出。

2)所有连接信息按电路从电源到接地的顺序依次输入,不会出现错位的情况。电源VCC一定是第一个连接的第一项,接地GND一定是最后一个连接的后一项。

3)连接信息如果只包含两个引脚,靠电源端的引脚在前,靠接地端的在后。

4)调速器的输入端只会直连VCC,不会接其他设备。整个电路最多只有连接在电源上的一个调速器,且不包含在并联单路中。

6、家居电路模拟系列1-4题目后续迭代设计:

1)电路结构变化:

迭代1:只有一条线路,所有元件串联
迭代2:线路中包含一个并联电路
迭代3:线路中包含多个串联起来的并联电路
迭代4:并联电路之间可能出现包含关系

2)计算方式的变化

迭代1只包含1个受控元件,不用计算电流,之后的电路计算要包含电流、电阻等电路参数。

3)电路元件的变化

每次迭代会增加1-2个新的电路元件。

image.png

图1:电路结构示意图

设计建议:

1、电路设备类:描述所有电路设备的公共特征。

2、受控设备类、控制设备类:对应受控、控制设备

3、串联电路类:一条由多个电路设备构成的串联电路,也看成是一个独立的电路设备

4、并联电路类:继承电路设备类,也看成是一个独立的电路设备

其他类以及类的属性、方法自行设计。

我的代码

import java.util.Scanner;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Map;
import java.util.ArrayList;public class Main {public static void main(String[] args) {Scanner in=new Scanner(System.in);Map<String,CircuitEquipment> elements=new TreeMap<String, CircuitEquipment>();//存储所有电路设备,方便最后输出Map<String, SeriesCircuit> series=new TreeMap<String, SeriesCircuit>();//存储所有电路,但不包括并联电路Map<String, ParallelCircuit> parallels=new TreeMap<String, ParallelCircuit>();//存储所有并联电路SeriesCircuit mainSerie=new SeriesCircuit();String strMatches1="#(\\w+):(\\[(IN|\\w+-\\d) (OUT|\\w+-\\d)\\]\\s*)+";//串联电路String strMatches2="#(\\w+):\\[(\\s*?T\\d)+\\]";//并联电路String strMatches3="#(\\w+):(\\[(VCC|\\w+-\\w+) (GND|\\w+-\\w+)\\]\\s*)+";//主电路String strMAtches5="#(\\w\\d):*([\\S]*)";//控制设备操作String strreg="(OUT|GND|VCC|IN|\\w\\d-(\\w+))";//普通设备连接信息String strregParallel="(M|T)(\\d)";//并联电路信息String str=in.nextLine();while(!str.equals("end")) {Pattern pattern=Pattern.compile(strreg);Matcher matcher=pattern.matcher(str);Pattern patternParallel=Pattern.compile(strregParallel);Matcher matcherParallel=patternParallel.matcher(str);if(Pattern.matches(strMatches1, str)) {SeriesCircuit newOne=new SeriesCircuit();if(matcherParallel.find()) {while(matcher.find()) {String name=String.valueOf(matcher.group().charAt(0))+String.valueOf(matcher.group().charAt(1));String group2result=matcher.group(2);if(group2result!=null) {if(!elements.containsKey(name)&&matcher.group(2).equals("1")) { switch(matcher.group().charAt(0)) {case 'K':OnOff k=new OnOff();k.setName(name);newOne.addItem(k);elements.put(k.getName(), k);break;case 'F':SpeedController f=new SpeedController();f.setName(name);newOne.addItem(f);elements.put(f.getName(), f);break;case 'L':VariableSpeedController l=new VariableSpeedController();l.setName(name);newOne.addItem(l);elements.put(l.getName(), l);break;	case 'B':IncandescentLightBulb b=new IncandescentLightBulb();b.setName(name);newOne.addItem(b);elements.put(b.getName(), b);break;case 'R':FluorescentLightBulb r=new FluorescentLightBulb();r.setName(name);newOne.addItem(r);elements.put(r.getName(), r);break;case 'D':CeilingFan d=new CeilingFan();d.setName(name);newOne.addItem(d);elements.put(d.getName(), d);break;case 'A':FloorFan a=new FloorFan();a.setName(name);newOne.addItem(a);elements.put(a.getName(), a);break;case 'S':Curtain s=new Curtain();s.setName(name);newOne.addItem(s);elements.put(s.getName(), s);break;case 'H':Mutex h=new Mutex();h.setName(name);newOne.addItem(h);elements.put(h.getName(), h);break;}}else if(elements.containsKey(name)){if(!newOne.extists(name)) {newOne.addItem(elements.get(name));}}}}newOne.setName(matcherParallel.group());series.put(matcherParallel.group(), newOne);}}else if(Pattern.matches(strMatches2, str)) {if(matcherParallel.find()) {ParallelCircuit newOne=new ParallelCircuit();String name=matcherParallel.group();newOne.setName(name);while(matcherParallel.find()) {newOne.addSerieids(matcherParallel.group());}parallels.put(name, newOne);}}else if(Pattern.matches(strMatches3, str)) {if(matcherParallel.find()) {SeriesCircuit newOne=new SeriesCircuit();while(matcher.find()) {if(matcher.group().equals("VCC")) {CircuitEquipment vcc=new CircuitEquipment();vcc.setName("VCC");vcc.setPin2Volt(220);newOne.addItem(vcc);}else {String name=String.valueOf(matcher.group().charAt(0))+String.valueOf(matcher.group().charAt(1));if(name.contains("M")&&matcher.group().contains("IN")) {if(parallels.containsKey(name))newOne.addItem(parallels.get(name));}if(name.contains("T")&&matcher.group().contains("IN")) {if(series.containsKey(name))newOne.addItem(series.get(name));}if(!elements.containsKey(name)) { switch(matcher.group().charAt(0)) {case 'K':OnOff k=new OnOff();k.setName(name);newOne.addItem(k);elements.put(k.getName(), k);break;case 'F':SpeedController f=new SpeedController();f.setName(name);newOne.addItem(f);elements.put(f.getName(), f);break;case 'L':VariableSpeedController l=new VariableSpeedController();l.setName(name);newOne.addItem(l);elements.put(l.getName(), l);break;	case 'B':IncandescentLightBulb b=new IncandescentLightBulb();b.setName(name);newOne.addItem(b);elements.put(b.getName(), b);break;case 'R':FluorescentLightBulb r=new FluorescentLightBulb();r.setName(name);newOne.addItem(r);elements.put(r.getName(), r);break;case 'D':CeilingFan d=new CeilingFan();d.setName(name);newOne.addItem(d);elements.put(d.getName(), d);break;case 'A':FloorFan a=new FloorFan();a.setName(name);newOne.addItem(a);elements.put(a.getName(), a);break;case 'S':Curtain s=new Curtain();s.setName(name);newOne.addItem(s);elements.put(s.getName(), s);break;case 'H':Mutex h=new Mutex();h.setName(name);newOne.addItem(h);elements.put(h.getName(), h);break;}}else {if(!newOne.extists(name)) {newOne.addItem(elements.get(name));}}}newOne.setName(matcherParallel.group());mainSerie=newOne;series.put(matcherParallel.group(), newOne);}}}else if(Pattern.matches(strMAtches5, str)) {Pattern pa5=Pattern.compile(strMAtches5);Matcher mp5=pa5.matcher(str);if(mp5.find()) {String name=mp5.group(1);String operation=mp5.group(2);switch(name.charAt(0)) {case 'K':OnOff k=(OnOff)elements.get(name);k.switchState();break;case 'F':SpeedController f=(SpeedController)elements.get(name);if(operation.equals("+"))f.UpShift();else f.DownShift();break;case 'L':VariableSpeedController l=(VariableSpeedController)elements.get(name);l.setGear(Double.valueOf(operation));break;			case 'H':Mutex mu=(Mutex)elements.get(name);mu.switchState();break;}}}str=in.nextLine();}for(String key:parallels.keySet()) {ParallelCircuit par=(ParallelCircuit)mainSerie.getCircuitEquipment(key);for(int i=0;i<par.getSeriesid().size();i++) {par.addSeries(series.get(par.getSeriesid().get(i)));}}CircuitEquipment gnd=new CircuitEquipment();gnd.setName("GND");mainSerie.addItem(gnd);ArrayList<CircuitEquipment> item=mainSerie.getItem();if(mainSerie.isClosed()==0) {	for(int i=0;i<item.size();i++) {if(i==0) {item.get(i).setPin2(item.get(i+1).getName());item.get(i+1).setPin1("VCC");item.get(i+1).setPin1Volt(220);}else if(i<item.size()-1) {if(item.get(i).getName().contains("H")) {item.get(i).setPin2Volt(item.get(i).getPin1Volt());item.get(i).setPin2(item.get(i+1).getName());item.get(i+1).setPin1(item.get(i).getName());item.get(i+1).setPin1Volt(item.get(i).getPin2Volt());}else if(item.get(i).getName().contains("K")) {item.get(i).setPin2Volt(item.get(i).getPin1Volt());item.get(i).setPin2(item.get(i+1).getName());item.get(i+1).setPin1(item.get(i).getName());item.get(i+1).setPin1Volt(item.get(i).getPin2Volt());}else if(item.get(i).getName().contains("L")) {VariableSpeedController l=(VariableSpeedController)item.get(i);l.setPin2Volt(l.getGear()*l.getPin1Volt());l.setPin2(item.get(i+1).getName());item.get(i+1).setPin1(l.getName());item.get(i+1).setPin1Volt(l.getPin2Volt());}else if(item.get(i).getName().contains("F")) {SpeedController f=(SpeedController)item.get(i);f.setPin2Volt(f.getDGear()*f.getPin1Volt());f.setPin2(item.get(i+1).getName());item.get(i+1).setPin1(f.getName());item.get(i+1).setPin1Volt(f.getPin2Volt());}else if(item.get(i).getName().contains("T")) {SeriesCircuit sc=(SeriesCircuit)item.get(i);double voltage=sc.getPin1Volt()*(sc.getResistance()/mainSerie.getAfterResis(i));sc.setPin2(item.get(i+1).getName());sc.setPin2Volt(sc.getPin1Volt()-voltage);item.get(i+1).setPin1(item.get(i).getName());item.get(i+1).setPin1Volt(item.get(i).getPin2Volt());ArrayList<CircuitEquipment> item2=sc.getItem();if(sc.isClosed()==0) {for(int k=0;k<item2.size();k++) {if(k==0) {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(sc.getPin1Volt());item2.get(k).setPin2Volt(item2.get(k).getPin1Volt());double voltage2=sc.getVlotageDifference()*(item2.get(k).getResistance()/sc.getAfterResis(k));item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k).setPin2Volt(voltage2);item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());if(item.get(i).getName().contains("H")) {item.get(i).setPin2Volt(item.get(i).getPin1Volt());item.get(i).setPin2(item.get(i+1).getName());item.get(i+1).setPin1(item.get(i).getName());item.get(i+1).setPin1Volt(item.get(i).getPin2Volt());}else if(item2.get(k).getName().contains("K")) {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(sc.getPin1Volt());item2.get(k).setPin2Volt(item2.get(k).getPin1Volt());item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());}else if(item2.get(k).getName().contains("L")) {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(sc.getPin1Volt());VariableSpeedController l=(VariableSpeedController)item2.get(k);l.setPin2Volt(l.getGear()*l.getPin1Volt());l.setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(l.getName());item2.get(k+1).setPin1Volt(l.getPin2Volt());}else if(item2.get(k).getName().contains("F")) {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(sc.getPin1Volt());SpeedController f=(SpeedController)item2.get(k);f.setPin2Volt(f.getDGear()*f.getPin1Volt());f.setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(f.getName());item2.get(k+1).setPin1Volt(f.getPin2Volt());}else {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(sc.getPin1Volt());double voltage3=item2.get(k).getPin1Volt()*(item2.get(k).getResistance()/sc.getAfterResis(k));item2.get(k).setPin2Volt(voltage3);item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());}}else if(k<item2.size()-1) {if(item.get(i).getName().contains("H")) {item.get(i).setPin2Volt(item.get(i).getPin1Volt());item.get(i).setPin2(item.get(i+1).getName());item.get(i+1).setPin1(item.get(i).getName());item.get(i+1).setPin1Volt(item.get(i).getPin2Volt());}else if(item2.get(k).getName().contains("K")) {item2.get(k).setPin2Volt(item2.get(k).getPin1Volt());item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());}else if(item2.get(k).getName().contains("L")) {VariableSpeedController l=(VariableSpeedController)item2.get(k);l.setPin2Volt(l.getGear()*l.getPin1Volt());l.setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(l.getName());item2.get(k+1).setPin1Volt(l.getPin2Volt());}else if(item2.get(k).getName().contains("F")) {SpeedController f=(SpeedController)item2.get(k);f.setPin2Volt(f.getDGear()*f.getPin1Volt());f.setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(f.getName());item2.get(k+1).setPin1Volt(f.getPin2Volt());}else {double voltage2=item2.get(k).getPin1Volt()*(item2.get(k).getResistance()/sc.getAfterResis(k));item2.get(k).setPin2Volt(voltage2);item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());}}else if(k==item2.size()-1) {item2.get(k).setPin2Volt(sc.getPin2Volt());item2.get(k).setPin2(item.get(i+1).getName());}}}	}//****************************************************else if(item.get(i).getName().contains("M")) {ParallelCircuit m=(ParallelCircuit)item.get(i);m.compulateResis();double voltage=m.getPin1Volt()*(m.getResistance()/mainSerie.getAfterResis(i));m.setPin2(item.get(i+1).getName());m.setPin2Volt(m.getPin1Volt()-voltage);item.get(i+1).setPin1(item.get(i).getName());item.get(i+1).setPin1Volt(item.get(i).getPin2Volt());//并联内部操作for(int j=0;j<m.getSeries().size();j++) {ArrayList<CircuitEquipment> item2=m.getSeries().get(j).getItem();if(m.getSeries().get(j).isClosed()==0) {for(int k=0;k<item2.size();k++) {if(k==0) {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(m.getPin1Volt());item2.get(k).setPin2Volt(item2.get(k).getPin1Volt());double voltage2=m.getVlotageDifference()*(item2.get(k).getResistance()/m.getSeries().get(j).getAfterResis(k));item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k).setPin2Volt(voltage2);item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());if(item.get(i).getName().contains("H")) {item.get(i).setPin2Volt(item.get(i).getPin1Volt());item.get(i).setPin2(item.get(i+1).getName());item.get(i+1).setPin1(item.get(i).getName());item.get(i+1).setPin1Volt(item.get(i).getPin2Volt());}else if(item2.get(k).getName().contains("K")) {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(m.getPin1Volt());item2.get(k).setPin2Volt(item2.get(k).getPin1Volt());item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());}else if(item2.get(k).getName().contains("L")) {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(m.getPin1Volt());VariableSpeedController l=(VariableSpeedController)item2.get(k);l.setPin2Volt(l.getGear()*l.getPin1Volt());l.setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(l.getName());item2.get(k+1).setPin1Volt(l.getPin2Volt());}else if(item2.get(k).getName().contains("F")) {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(m.getPin1Volt());SpeedController f=(SpeedController)item2.get(k);f.setPin2Volt(f.getDGear()*f.getPin1Volt());f.setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(f.getName());item2.get(k+1).setPin1Volt(f.getPin2Volt());}else {item2.get(k).setPin1(item.get(i-1).getName());item2.get(k).setPin1Volt(m.getPin1Volt());double voltage3=item2.get(k).getPin1Volt()*(item2.get(k).getResistance()/m.getSeries().get(j).getAfterResis(k));item2.get(k).setPin2Volt(voltage3);item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());}}else if(k<item2.size()-1) {if(item.get(i).getName().contains("H")) {item.get(i).setPin2Volt(item.get(i).getPin1Volt());item.get(i).setPin2(item.get(i+1).getName());item.get(i+1).setPin1(item.get(i).getName());item.get(i+1).setPin1Volt(item.get(i).getPin2Volt());}else if(item2.get(k).getName().contains("K")) {item2.get(k).setPin2Volt(item2.get(k).getPin1Volt());item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());}else if(item2.get(k).getName().contains("L")) {VariableSpeedController l=(VariableSpeedController)item2.get(k);l.setPin2Volt(l.getGear()*l.getPin1Volt());l.setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(l.getName());item2.get(k+1).setPin1Volt(l.getPin2Volt());}else if(item2.get(k).getName().contains("F")) {SpeedController f=(SpeedController)item2.get(k);f.setPin2Volt(f.getDGear()*f.getPin1Volt());f.setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(f.getName());item2.get(k+1).setPin1Volt(f.getPin2Volt());}else {double voltage2=item2.get(k).getPin1Volt()*(item2.get(k).getResistance()/m.getSeries().get(j).getAfterResis(k));item2.get(k).setPin2Volt(voltage2);item2.get(k).setPin2(item2.get(k+1).getName());item2.get(k+1).setPin1(item2.get(k).getName());item2.get(k+1).setPin1Volt(item2.get(k).getPin2Volt());}}else if(k==item2.size()-1) {item2.get(k).setPin2Volt(m.getPin2Volt());item2.get(k).setPin2(item.get(i+1).getName());}}}	}//*******************************************}else {double voltage=item.get(i).getPin1Volt()*(item.get(i).getResistance()/mainSerie.getAfterResis(i));item.get(i).setPin2Volt(item.get(i).getPin1Volt()-voltage);item.get(i).setPin2(item.get(i+1).getName());item.get(i+1).setPin1(item.get(i).getName());item.get(i+1).setPin1Volt(item.get(i).getPin2Volt());}}}}in.close();int indoorlight=0;for(String key:elements.keySet()) {if(elements.get(key).getName().contains("B")) {IncandescentLightBulb b=(IncandescentLightBulb)elements.get(key);indoorlight+=b.getLuminance();}if(elements.get(key).getName().contains("R")) {FluorescentLightBulb r=(FluorescentLightBulb)elements.get(key);indoorlight+=r.getLuminance();}}//		for(String key:elements.keySet()) {
//			System.out.println(elements.get(key).getName()+" "+elements.get(key).getPin1Volt()+" "+elements.get(key).getPin2Volt());
//		}
//		System.out.println("================");for(String key:elements.keySet()) {if(elements.get(key).getName().contains("K")) {OnOff k=(OnOff)elements.get(key);if(k.getState()==0)System.out.println("@"+k.getName()+":turned on");else System.out.println("@"+k.getName()+":closed");	}}for(String key:elements.keySet()) {if(elements.get(key).getName().contains("F")) {SpeedController f=(SpeedController)elements.get(key);System.out.println("@"+f.getName()+":"+f.getGear());}}for(String key:elements.keySet()) {if(elements.get(key).getName().contains("L")) {VariableSpeedController l=(VariableSpeedController)elements.get(key);System.out.printf("@%s:%.2f\n",l.getName(),l.getGear());}}for(String key:elements.keySet()) {if(elements.get(key).getName().contains("B")) {IncandescentLightBulb b=(IncandescentLightBulb)elements.get(key);System.out.println("@"+b.getName()+":"+b.getLuminance());}}for(String key:elements.keySet()) {if(elements.get(key).getName().contains("R")) {FluorescentLightBulb r=(FluorescentLightBulb)elements.get(key);System.out.println("@"+r.getName()+":"+r.getLuminance());}}for(String key:elements.keySet()) {if(elements.get(key).getName().contains("D")) {CeilingFan d=(CeilingFan)elements.get(key);System.out.println("@"+d.getName()+":"+d.getRotationRate());}}for(String key:elements.keySet()) {if(elements.get(key).getName().contains("A")) {FloorFan a=(FloorFan)elements.get(key);System.out.println("@"+a.getName()+":"+a.getRotationRate());}}for(String key:elements.keySet()) {if(elements.get(key).getName().contains("H")) {Mutex mu=(Mutex)elements.get(key);if(mu.getState()==0)System.out.println("@"+mu.getName()+":turned on");else System.out.println("@"+mu.getName()+":closed");	}}for(String key:elements.keySet()) {if(elements.get(key).getName().contains("S")) {Curtain s=(Curtain)elements.get(key);s.setRate(indoorlight);int rate=(int)(s.getRate()*100);System.out.println("@"+s.getName()+":"+rate+"%");}}}}class CircuitEquipment {private String name;//设备名private String pin1;//接入引脚private String pin2;//输出引脚private double pin1Volt;//输入电压private double pin2Volt;//输出电压private double resistance;//电阻值public CircuitEquipment(String name, String pin1, String pin2, double pin1Volt, double pin2Volt,double resistance) {super();this.name = name;this.pin1 = pin1;this.pin2 = pin2;this.pin1Volt = pin1Volt;this.pin2Volt = pin2Volt;this.resistance = resistance;}public CircuitEquipment() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPin1() {return pin1;}public void setPin1(String pin1) {this.pin1 = pin1;}public String getPin2() {return pin2;}public void setPin2(String pin2) {this.pin2 = pin2;}public void setPin1Volt(double pin1Volt) {this.pin1Volt = pin1Volt;if(pin1Volt==0)this.setPin2Volt(0);}public void setPin2Volt(double pin2Volt) {this.pin2Volt = pin2Volt;}public double getPin1Volt() {return pin1Volt;}public double getPin2Volt() {return pin2Volt;}public double getResistance() {return resistance;}public void setResistance(double resistance) {this.resistance = resistance;}public double getVlotageDifference() {return Double.valueOf(String.format("%.2f", pin1Volt-pin2Volt));}
}
class CeilingFan extends CircuitEquipment{public CeilingFan() {super();setResistance(20);}public int getRotationRate() {double V=getVlotageDifference();if(V<80)return 0;else if(V<150)return (int)(4*V-240);elsereturn 360;}
}
class FloorFan extends CircuitEquipment{public FloorFan() {super();setResistance(20);}public int getRotationRate() {double V=getVlotageDifference();if(V<80)return 0;else if(V<100)return 80;else if(V<120)return 160;else if(V<140)return 260;else return 360;}
}
class FluorescentLightBulb extends CircuitEquipment{public FluorescentLightBulb() {super();setResistance(5);}public int getLuminance() {if(getVlotageDifference()==0)return 0;return 180;}
}
class IncandescentLightBulb extends CircuitEquipment{public int getLuminance(){if(getVlotageDifference()<10)return 0;return(int) (50+(getVlotageDifference()-10)*5/7);}public IncandescentLightBulb() {super();setResistance(10);}
}
class OnOff extends CircuitEquipment{private final int On=1;private final int Off=0;private int state;public OnOff() {super();}public int getState() {return state;}//设置引脚电压@Overridepublic void setPin1Volt(double pin1Volt) {super.setPin1Volt(pin1Volt);if(state==On) setPin2Volt(pin1Volt);}//改变开关状态(开变关或关变开)public void switchState() {if(state==On)state=Off;else state=On;}}
class ParallelCircuit extends CircuitEquipment{private ArrayList<String> serieids=new ArrayList<String>();private ArrayList<SeriesCircuit> series=new ArrayList<SeriesCircuit>();public ParallelCircuit() {super();}public void addSeries(SeriesCircuit o) {series.add(o);double product=1;double sum=0;for(int i=0;i<series.size();i++) {product*=series.get(i).getResistance();sum+=series.get(i).getResistance();}setResistance(product/sum);}public int isClosed() {for(int i=0;i<series.size();i++) {if(series.get(i).isClosed()==0)return 0;}return 1;}public void compulateResis() {int n=series.size();double product=1;double sum=0;for(int i=0;i<series.size();i++) {if(series.get(i).isClosed()==0) {product*=series.get(i).getResistance();sum+=series.get(i).getResistance();}else {n--;}}if(n==1){setResistance(sum);}else {setResistance(product/sum);}}public ArrayList<SeriesCircuit> getSeries(){return series;}public ArrayList<String> getSeriesid(){return serieids;}public void addSerieids(String name) {serieids.add(name);}
}
class SeriesCircuit extends CircuitEquipment{private double resistance;private ArrayList<CircuitEquipment> item=new ArrayList<>();public SeriesCircuit() {super();}public void addItem(CircuitEquipment element) {item.add(element);}public ArrayList<CircuitEquipment> getItem() {return item;}public void setResistance(double resistance) {this.resistance = resistance;}public double getResistance() {double r=0;for(int i=0;i<item.size();i++)r+=item.get(i).getResistance();resistance=r;return resistance;}//检测是否存在该电器public Boolean extists(String name) {for(int i=0;i<item.size();i++) if(item.get(i).getName().equals(name))return true;return false;}//通过名字寻找电器public CircuitEquipment getCircuitEquipment(String name) {int index=0;for(int i=0;i<item.size();i++)if(item.get(i).getName().equals(name))index=i;return item.get(index);}//寻找下一位,若不存在则返回自己public CircuitEquipment next(String name) {int index=0;for(int i=0;i<item.size();i++)if(item.get(i).getName().equals(name))index=i;if(index<item.size()-1)return item.get(index+1);else return item.get(index);}//寻找前一位,若不存在则返回自己public CircuitEquipment before(String name) {int index=0;for(int i=0;i<item.size();i++)if(item.get(i).getName().equals(name))index=i;if(index-1>=0)return item.get(index-1);else return item.get(index);}//寻找最后一位public CircuitEquipment last() {return item.get(item.size());}//判断电路是否闭合public int isClosed() {int flag=0;for(int i=0;i<item.size();i++) {if(item.get(i).getName().charAt(0)=='K') {OnOff k=(OnOff)item.get(i);if(k.getState()==0)flag++;}if(item.get(i).getName().charAt(0)=='M') {ParallelCircuit p=(ParallelCircuit)item.get(i);if(p.isClosed()!=0)flag++;}if(item.get(i).getName().charAt(0)=='T') {SeriesCircuit sc=(SeriesCircuit)item.get(i);if(sc.isClosed()!=0)flag++;}}return flag;}//获得一个电器及后面所有电器的总电压public double getAfterResis(int index){double ar=0;for(int i=index;i<item.size();i++){ar+=item.get(i).getResistance();}return ar;}//展示电路信息public void show() {for(int i=0;i<item.size();i++) {switch(item.get(i).getName().charAt(0)) {case 'K':OnOff k=(OnOff)item.get(i);if(k.getState()==0)System.out.println("@"+k.getName()+":turned on");else System.out.println("@"+k.getName()+":closed");break;case 'F':SpeedController f=(SpeedController)item.get(i);System.out.println("@"+f.getName()+":"+f.getGear());break;case 'L':VariableSpeedController l=(VariableSpeedController)item.get(i);System.out.printf("@%s:%.2f\n",l.getName(),l.getGear());break;		case 'B':IncandescentLightBulb b=(IncandescentLightBulb)item.get(i);System.out.println("@"+b.getName()+":"+b.getLuminance());break;case 'R':FluorescentLightBulb r=(FluorescentLightBulb)item.get(i);System.out.println("@"+r.getName()+":"+r.getLuminance());break;case 'D':CeilingFan d=(CeilingFan)item.get(i);System.out.println("@"+d.getName()+":"+d.getRotationRate());break;}}}}
class SpeedController extends CircuitEquipment{private final double First=0;private final double Second=0.3;private final double Third=0.6;private final double Four=0.9;private double Gear;public SpeedController() {super();}public Double getDGear() {return Gear;}public int getGear() {if(Gear==Third)return 2;	if(Gear==Second)return 1;if(Gear==Four)return 3;return 0;}public void UpShift() {if(Gear==Third)Gear=Four;	if(Gear==Second)Gear=Third;if(Gear==First)Gear=Second;setPin2Volt(Gear*getPin1Volt());}public void DownShift() {if(Gear==Second)Gear=First;if(Gear==Third)Gear=Second;if(Gear==Four)Gear=Third;setPin2Volt(Gear*getPin1Volt());}
}
class VariableSpeedController extends CircuitEquipment{private double Gear;public VariableSpeedController() {super();}public double getGear() {return Gear;}public void setGear(double gear) {if(Gear>=0&&Gear<=1)Gear = gear;setPin2Volt(Gear*getPin1Volt());}	
}
class Curtain extends CircuitEquipment{private double rate;public Curtain() {super();setResistance(15 );}public void setRate(double l) {if(l>=400)rate=0;else if(l>=300)rate=0.2;else if(l>=200)rate=0.4;else if(l>=100)rate=0.6;else if(l>=50)rate=0.8;else rate=1;}public double getRate() {if(getVlotageDifference()>=50)return rate;else return 1.0;}}
class Mutex extends CircuitEquipment{private final int On=1;private final int Off=0;private int state=1;public Mutex() {super();setResistance(5);}public int getState() {return state;}//设置引脚电压@Overridepublic void setPin1Volt(double pin1Volt) {super.setPin1Volt(pin1Volt);if(state==On) setPin2Volt(pin1Volt);}//改变开关状态(开变关或关变开)public void switchState() {if(state==On)state=Off;else state=On;}}

设计与分析

根据题目需求,我设计了十个基本类用于储存、修改和输出电路中个电器信息。

电器类(CircuitsEquipment)

这是其他电器的父类,电器类,子类有如开关、变阻器、灯、扇,等等。

开关类(OnOff,为与“switch”做区分)

继承父类电器类。

连续调速器类(VariableSpeedController)

分档调速器类(SpeedController)

串联电路类(SeriesCircuit)

并联电路类(ParallelCircuit)

含有串联类并继承电路类。

白炽灯类(IncandescentLightBulb)

日光灯类(FluorescentLightBulb)

落地扇类(FloorFan)

吊扇类(CeilingFan)

上四类皆继承自电器类,并含有自身的特殊属性。

受控窗帘类(Curtain)

踩坑心得

在使用Java编写家具强电器电路模拟程序的过程中,我遇到了一些预料之外的挑战和“坑”,这些经历让我深刻体会到了编程的复杂性和细致性。

首先,我遇到的第一个“坑”是电路逻辑的复杂性。在家具强电器电路中,往往涉及到多个电器设备的并联和串联,以及开关的通断控制。在初始设计时,我过于简化了电路模型,没有充分考虑到各种可能的电路状态和边界情况,导致程序在实际运行中出现了不少问题。为了解决这些问题,我不得不重新梳理电路逻辑,对代码进行了大量的修改和调试。

其次,我在处理异常和错误时遇到了困难。在模拟电路的过程中,可能会遇到各种异常情况,如电路短路、过载等。最初,我没有为这些情况设计充分的异常处理机制,导致程序在遇到问题时无法给出明确的提示或进行适当的处理。为了解决这一问题,我花费了不少时间学习和理解Java的异常处理机制,并在程序中添加了相应的异常处理代码。

另外,我在内存管理方面也遇到了一些挑战。在信息读取和处理的过程中,忽略了串联电路以及并联电路与电器的相似性,导致了如果题目信息中的主电路如果有串联电路,则无发正确读取,导致处理失败,答案错误,最后在为串联类继承电器类后解决问题。在模拟电路的过程中,需要频繁地创建和销毁电路对象。最初,我没有注意到内存泄漏的问题,导致程序在长时间运行后出现了性能下降的现象。通过深入学习Java的内存管理机制和垃圾回收机制,我发现了内存泄漏的根源,并优化了代码以减少不必要的对象创建。

改进建议

  1. 增强电路逻辑模型
    首先,我们需要对电路逻辑模型进行更深入的研究和设计。确保模型能够准确模拟各种复杂的电路结构,包括并联、串联以及开关的通断状态。此外,还应该考虑电路中的异常情况,如短路、过载等,并设计相应的处理机制。
  2. 优化异常处理机制
    在现有的程序中,异常处理可能还不够完善。建议添加更详细的异常分类,并为每种异常提供明确的错误提示和建议的解决方案。这样,当电路出现问题时,用户能够更快地定位问题并进行修复。
  3. 提高内存管理效率
    对于频繁创建和销毁电路对象的情况,我们可以考虑使用对象池技术来减少内存分配和垃圾回收的开销。此外,对于不再使用的对象,应及时进行清理,避免内存泄漏。

三、总结

在本阶段的家居强电电路模拟程序题目集的学习中,我深入了解了强电电路的基本原理和模拟程序的设计思路。通过实践,我掌握了电路图的绘制、元件属性的设定、电流电压的计算等基础知识,并学会了如何将理论知识应用到编程实践中。然而,我也意识到在某些方面还需进一步加强。首先,对于复杂电路的模拟和优化算法,我仍需深入学习,以提高模拟的准确性和效率。其次,与实际应用结合的能力还有待提高,需要更多了解家居强电系统的实际需求和问题。未来,我将进一步研究强电电路模拟的前沿技术,探索新的优化算法和解决方案。同时,我也将加强与实际应用的结合,通过参与实际项目,提升自己的实践能力和解决问题的能力。相信在不断的学习和实践中,我能够更好地掌握家居强电电路模拟技术,为未来的学习和工作打下坚实的基础。

​ “日新自强,知行合一“。

四、对本们课程的建议

经过一学期的学习,我认为本门课程有些许可以改进的地方。比如说,既然采用了线上线下相结合的教学模式,那么在线下教学时可以不止局限于基础知识这样只是对线上教学的一种无用功,在线下教学可以通过线上的进度对其拓展讲解。同时可以每隔一段时间进行阶段性课堂测验,检验这一段时间的学习成果,以免有些同学到了最后时间才开始学习。


  1. 题目 ↩︎

  2. 代码 ↩︎

  3. 设计与分析 ↩︎

  4. 踩坑心得 ↩︎

  5. 改进建议 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/734111.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue前后端分离项目-vue项目搭建5

1.改造登录vue/src/views/LoginView.vue,登陆后存储user信息到sessionStorage,进入到login页面移除sessionStorage里的user 2.改造vue/src/components/Header.vue,从sessionStorage中获取user,每个人登陆后根据个人信息显示名称 3.增加vue/src/views/Person.vue,点击个人信…

生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)

前言:今天演示下生产环境keepalived的部署方式,安装模式有很多,比如说主备模型和双主模型,主备分:抢占模式 和 非抢占模式。这里我会一一展开说具体怎么配置 一、双节点均部署Nginx: 第一步:上传安装包到/usr/local/ 第二步:安装编译依赖(使用普通用户需要家sudo) yu…

无业游民写的最后一个.net有关项目框架

理想很丰满,现实往往很残酷。 一种按照ddd的方式,根据业务来把自己需要的模块一个一个写出来,再按照模块把需要的接口一个一个的写出来,堆砌一些中间件,以及解耦的command,handler等等 ,一个项目就这么成型了。上面的项目有一个非常清晰的特点,就是按需开发,不需要去可…

OOP第三次Blog

前言: (1) 第七次题集只有一道题目——家居强电电路模拟程序-3,这是第三次迭代,这次迭代主要的点有四个。 ​ 首先本次迭代添加了线路中存在多个串联起来的并联电路。不同于上次的单并联,本次更复杂。 ​ 然后本次还新迭代了一种控制器——互斥开关,互斥…

23201829OO第三次blog作业

OO第三次blog作业 前言 这次blog是本学期最后一次回顾总结,本次blog的范围是“家居强电电路模拟程序”的第三和第四次迭代,分别加入了互斥开关、窗帘的概念、多个串联起来的并联电路、串联电路中包含其他串联电路的情况和串联电路中包含串联电路的情况和二极管。因此这两次PT…

企业做账流程详解

都说会计月底很忙,那究竟都在忙什么呢,一起来看看吧

快速提取视频字幕!适用B站、AI字幕等等。好用

快速提取视频字幕!适用B站、AI字幕等等。好用 以B站为例: 视频教程:快速提取视频字幕!适用B站、AI字幕!非常好用_哔哩哔哩_bilibili 无论是视频的字幕,还是AI字幕,都可以提取。比较简单。 首先好像需要确定 视频的字幕还是AI字幕。如果是视频字幕,下面F12之后,输入的是…

Ymodem协议说明

Ymodem流程介绍1.Ymodem帧格式 Ymodem两种帧格式: 1024数据格式帧:名称 帧头 包号 包号反码 信息块 校验简写 SOH PN XPN DATA CRC字节数 1 1 1 128 2128数据格式帧:名称 帧头 包号 包号反码 信息块 校验简写 STX PN XPN DATA CRC字节数 1 1 1 1024 21.1 帧头 帧头一个有两…

CentOS7.9部署Nginx

简介 本章节主要讲的是在Linux系统CentOS7.9上去完成Nginx Web服务安装部署 步骤 1.配置 Nginx 源 2.yum 安装 Nginx 3.启动 Nginx 4.浏览默认站点 实施 1.配置 Nginx 源// 执行如下命令 rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el…

CF132E Bits of merry old England

传送门构图好题。郑哥的题解 每一个输出的位置看作先分配变量(赋值或者用前面的),再输出。 给每个位置拆三个点 \(v_{i,1/2/3}\)。\(v_{i,1}\) 的流入表示这个位置的 "空变量" 数量(包括有值但是我们选择让它不重复使用的变量);\(v_{i,2}\) 有流入表示分配好了…

opp7~8题目集的反思与总结

opp7~8题目集的反思与总结 1、前言: 这两个题目集都是对于电路题目的迭代,都是对于电路题目的应用,对于电路的题目集,在上次的opp的题目集中就已经简述过了,没有看过的可以点击链接查看(opp第二次blog) 在这个里面就是之前的opp的题目集,讲述了大致的内容,这个是基础,…

CentOS7.9部署.NET Core 8.0

简介 本章节主要讲的是在Linux系统CentOS7.9上去完成.NET Core 8.0软件的安装,确定Linux的版本是x64还是arm64的,然后到.NET Core的官网下载8.0的SDK,并进行安装 步骤 1.查看系统版本 2.打开.NET Core 8.0下载网址 3.下载与Linux系统对应版本的.NET Core SDK 4.上传.NET Cor…

使用世界变换的逆转置矩阵对法线进行变换

最近在做法向量变换的时候,踩了两个坑,记录一下相关的知识点法向量变换细节记录 最近在做法向量变换的时候,踩了两个坑,记录一下相关的知识点 法向量做变换,最后一位是补0 我们知道,顶点在做变换的时候最后一位是 1.0,法线最后一位是补0.0 vec3 normCurrent = (getMatri…

JS逆向——动态页面逆向

JS逆向——动态页面逆向 一. 步骤关键点分析 逆向分析信息提取逻辑 模拟执行二. 实现 1. 关键点分析 找到实现kml导出的按键,发现是通过JS函数实现的,需要针对该函数进行JS代码逆向分析,找到实现的函数逻辑。 ​​ 2. 逆向分析信息提取逻辑 定位找到exportKML函数 ​​ 对该…

开源一款基于 Typecho 开发的导航主题

主题介绍 BeaconNav是基于typecho开发的一款导航主题,Beacon是灯塔的意思,希望使用者在知识的海洋里能够如同有灯塔指引一样目标明确,永远不会迷失方向。 演示站点:https://nav.ilaozhu.com主题特点响应式设计,适配手机、平板、电脑等设备; 支持自定义 LOGO、背景图片; …

一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator

前言 对于后端程序员来说,编写SQL代码是日常工作中不可或缺的一部分。然而,随着数据复杂性的增加,如何高效、准确地编写SQL查询成为了新的挑战。幸运的是,SQL Translator的出现为后端程序员提供了一个强大的工具,将自然语言查询转换为精确的SQL代码,极大地提高了工作效率…

LINUX查看文件总行数和指定行,wc命令的使用

LINUX查看文件总行数和指定行明训关注IP属地: 浙江 0.2972019.01.26 19:20:22字数 92阅读 9,764问题说明 在Linux服务器运维或操作过程中时常需要统计文件行数和查看指定行 相关命令 查看文件指定行描述命令查看文件的前5行 head -5 test.log查看文件的后2行 tail -2 test.log …

正义使者-隐藏关

最正义的一集\(\Huge{放假!!!}\)

Openvx Tiovx技术杂谈

Openvx & Tiovx技术杂谈 Openvx & Tiovx (六) Host & Target https://zhuanlan.zhihu.com/p/474701695 https://dev.ti.com/tirex/explore/node?node=ANd.gAKGXC97FboluTIMhw Openvx 保留了代码移植到多核平台的可能性。可能是因为多核平台的种类繁多,Openvx 在定…