关于家居强电电路模拟程序3和4总结

news/2024/10/5 10:40:32/文章来源:https://www.cnblogs.com/yimeiren/p/18275959

前言:对于家居强电电路的3和4总结来说,考察了正则表达式,类的运用,程序与设计的基础使用,ArristList 类的使用等等知识点。相对于家居强电电路3来说,4的难度大得多。在3的基础上,加上了引脚的输出电压,对于输出通过引脚的对应电压。那么要判断更多的东西(比如说引脚是否是正序还是反序,对于互斥开关则是最难改动的。,同时还加入了在并联电路加入了并联电路,使情况更加复杂)也正是因为这样我才写不出来,因为4比前面3个的总体结构都感觉改变了,导致到后面都不知如何修改,出现了一系列问题。总以为如此题量也是相对大的。
设计与分析:

  • 家居强电电路3:
    加上了互斥开关和窗帘,那么就要加上对应的2个类了。和之前几个电器类差不多一样。以及正则表达式来读取互斥开关和窗帘的信息也是和之前几个电器一样的处理。
    居然加入了互斥开关就要判断它连接在那个引脚(1-2)或者(1-3),因此就要有一个整体范围来判断。因此我就用ArrayList来创造了这一个变量,当出现了#H1这类似的东西就来将引脚连接交换一下,在电路判断时就来引用这个变量看看这个变量和电路的互斥开关是否是一样的情况。代码如下
if(Integer.parseInt(name2)==2||Integer.parseInt(name3)==2){mutexSwitches.flag2=1;mutexSwitches.flag3=0;}if(Integer.parseInt(name2)==3||Integer.parseInt(name3)==3){mutexSwitches.flag3=1;mutexSwitches.flag2=0;}mutexSwitches.Res();seriesConnection.mutexSwitches.add(mutexSwitches);MutexSwitches mutexSwitches1 = new MutexSwitches(name1);

这样就可以将这个互斥开关连接情况记录下来,到之后要开始运用时就可以直接使用了。
也对于新加入的窗帘也是相对来说比较简单的,就只有判断窗帘对应的电压和亮度就可以了,当然对于电压可以和之前几个电器一样来计算求出,但是又对于这个亮度就要先把日光灯和白炽灯的总亮度计算出来,最后相加得以求出,还好在输出结果时窗帘是最后一个输出的,那么就可以先来将发光的光度逐一求出,最后再来判断窗帘的开光程度。代码如下:

if (B > 0) {for (int i = 0; i < incandescentLamps.size(); i++) {a = a+incandescentLamps.get(i).bright();System.out.println("@B" + incandescentLamps.get(i).name + ":" + incandescentLamps.get(i).bright());}}if (R > 0) {for (int i = 0; i < fluorescentLamps.size(); i++) {a = a+fluorescentLamps.get(i).bright();System.out.println("@R" + fluorescentLamps.get(i).name + ":" + fluorescentLamps.get(i).bright());}}if(S>0){for (int i = 0; i < hsiangHsiens.size(); i++){System.out.println("@S"+hsiangHsiens.get(i).name+":"+(int)(hsiangHsiens.get(i).TurnOnScale( a)*100)+"%");}}

将a化成总亮度的话就可以最后的时候把a放进入就可以求出窗帘开关程度了。
最后一个点就是在串联电路中加入了串联电路,也就是可以将这个串联当作从一个可以出现断路情况并且包含电阻的电器了,在判断串联电路是否断路时加上它包含的串联电路是否出现了断路情况就可以了,以及在给电压时也要加上对应情况就可以了。
整体来说已经将这次迭代的这两个写完了。
而整体结构为:

  • 家居强电电路4:
    加上了5个点
    1.在输出时加上了了每个电器引脚对应的流过电压,那么就会出现2总情况,1:引脚为正序接入的(1-2)2:引脚为逆序输入的(2-1),互斥开关还加上一个(3-1)可能性,那么就要先判断电器接口是否正序接入,所以说我用来判断引脚是1还是非1那么就可以判断是否正序,代码如下:
```plaintextif (!Y.substring(Y.indexOf('-') + 1).equals("OUT")) {math = Integer.parseInt(Y.substring(Y.indexOf('-') + 1));if (math == 1)flag1 = false;elseflag1 = true;//是一就是true正确的方向}
```

这样就可以解决是否正序接入了。然后把结果带入到每个电器order属性之中去就可以了。
解决了正序和逆序问题的话就可以接下来判断电器的电压了。首先就是要从主路开始计算,每一个分段点的电压再逐一记录分段点的电压大小。就可以知道电压进入电器之前的电压了,之后通过电器之后就可以用进入电器的电压减去电器占用电压的大小就可以求出电器另外的引脚的电压了。同时也要将并联和串联电路看作为一个有电阻的电器。同时还要判断是否并联电路是否出现了短路现象了,当出现了短路情况就要将并联看作为一个电阻为0的电器,其中并联电路的串联电器的引脚电压都为进入并联电路的电压,且没有电压差,就可以看做成一个短路情况了。注意还有一个重点,那就是串联电路的顺序也是非常重要的,所以说在读入数据的时候就要加入每一个电器对应的顺序问题了,因此我在串联类中加入了ArraryList类(String)order,将电器对应的名字和缩写给记录起来,到时候再来按顺序来找对应的数据就可以了。计入order顺序代码如下:

name1 = (split[0].substring(1, split[0].indexOf('-')));switch (c) {case 'H':MutexSwitches mutexSwitches = new MutexSwitches(name1);seriesConnection.order.add("H" + name1);```plaintextcase 'K':seriesConnection.order.add("K" + name1);
```

来使用order顺序的代码如下:

for (int i = 0; i < seriesConnection.order.size(); i++) {c = seriesConnection.order.get(i).charAt(0);name = (seriesConnection.order.get(i).substring(1));switch (c) {case 'F':if (differentialGovernors.get(0).order) {differentialGovernors.get(0).voltage1 = voltage;differentialGovernors.get(0).voltage2  = voltage;} else {differentialGovernors.get(0).voltage2 = voltage;differentialGovernors.get(0).voltage1 = voltage;}break;case 'L':if (continuousGovernors.get(0).order) {continuousGovernors.get(0).voltage1 = voltage;continuousGovernors.get(0).voltage2 = voltage;} else {continuousGovernors.get(0).voltage2 = voltage;continuousGovernors.get(0).voltage1 = voltage;}break;

以下代码都是部分情况。
2. 并联电路中可以加入并联了。
对于这个改变我的代码没有什么改变之处因为,在判断并联电路的电阻时,我也是按照并联电路ArraryList类来遍历的如果出现多个并联电路的话一样判断,因此没有什么可迭代之处。
3.短路监测:
当出现了短路情况就有两种可能:
1.串联电路出现了短路情况
2.并联电路出现了短路情况。
对于第一点的话就可以当作一个电阻为0的电器了,那么当主电路的电阻都为0的话就可以出现了短路现象,输出short circuit error。
对于第二点的话并联电路出现了短路情况,那些并联电路中的有电阻的串联就不会有电流流过,那么他们的左右引脚都为并联电路的电压,没有差值。那么当出现了并联电路大于1条串联电路的电阻为0,就会出现分流情况,就与超出电器最大电流有关了,都要考虑。
4.加入了二极管电器:
二极管就是一个比较特别的开关,就要观察引脚情况,如果引脚为正序就可以电流通过,但是反之即出现断路的情况。二极管的电阻和输出情况代码如下:

public void consult() {if (this.order)resistance = 0;elseresistance = 100;}public String ToString() {if (this.order) {if (this.current > 8)return "@P" + this.name + ":conduction" + " " + (int) this.voltage1 + "-" + (int) (this.voltage2 ) + " exceeding current limit error";elsereturn "@P" + this.name + ":conduction" + " " + (int) this.voltage1 + "-" + (int) (this.voltage2);} else {if (this.current > 8)return "@P" + this.name + ":cutoff" + " " + (int) (this.voltage1) + "-" + (int) this.voltage2 + " exceeding current limit error";elsereturn "@P" + this.name + ":cutoff" + " " + (int) (this.voltage1) + "-" + (int) this.voltage2;}}

相对来说非常简单。
5.电流限制:
家居强电电路4中加上了电器的最大电流情况,那么就只要判断一下串联电路的总电流就可以了,之后再按照order遍历一下。我在每一个类中都加上了一个current属性,当超过了这个对应的电流就输出另外一种情况,代码如下:

public String ToString() {if (this.order) {if (this.current > 8)return "@P" + this.name + ":conduction" + " " + (int) this.voltage1 + "-" + (int) (this.voltage2 ) + " exceeding current limit error";elsereturn "@P" + this.name + ":conduction" + " " + (int) this.voltage1 + "-" + (int) (this.voltage2);} else {if (this.current > 8)return "@P" + this.name + ":cutoff" + " " + (int) (this.voltage1) + "-" + (int) this.voltage2 + " exceeding current limit error";elsereturn "@P" + this.name + ":cutoff" + " " + (int) (this.voltage1) + "-" + (int) this.voltage2;}}

以上代码为部分代码。
那么家居强电电路4的迭代情况已经说明清楚设计了。整体结构如下:

踩坑心得:
1.在写家居强电电路3时出现了比较问题。当时在比较输出顺序的时候我使用的是名字的数字大小情况输出,那么11就会输出在2前面,然而不是的。正确的输出顺序应该是字符串排序,11应该在2的前面才正常。修改了一下排序的要求就可以了。部分代码如下:

Collections.sort(switches, new Comparator<Switch>() {@Overridepublic int compare(Switch o1, Switch o2) {return o1.name.compareTo(o2.name);}});

2.在家局强电电路3中当出现了并联断路的情况没有考虑,会直接当作正常来判断。因此我在判断串联电路是否断路的那个方法里加入了对于并联断路的情况就修改了这个问题。
3.在家居强电电路4中对于计算串联和并联电路的电阻问题一直会计算错误,不知为何数据传入不到那里。因此我改变了一种计算电阻的方式(又总到分),先从总串联电路开始算起,一点一点计算,当出现了并联就开始计算并联的电路,遍历并联电路的串联电路,对于并联电路的串联电路就来递归该函数就可以了。这样既可以一点一点吧全部的电阻计算出来。部分电器计算电阻代码如下:

public static void k(SeriesConnection seriesConnection) //计算串联的电阻{double sum = 0;if (seriesConnection.floorFans.size() > 0) {for (int i = 0; i < seriesConnection.floorFans.size(); i++) {sum = sum + seriesConnection.floorFans.get(i).resistance;}}if (seriesConnection.parallelConnections.size() > 0) {for (int i = 0; i < seriesConnection.parallelConnections.size(); i++) {l(seriesConnection.parallelConnections.get(i));sum = sum + seriesConnection.parallelConnections.get(i).resistance;}}seriesConnection.resistance = sum;seriesConnection.resistance = sum;for(int j=0;j<seriesConnections.size();j++){if(seriesConnection.name.equals(seriesConnections.get(j).name)){seriesConnections.get(j).resistance = sum;break;}}}}

改进建议:
1.在进行遍历时一直使用if(int i=0;i<size();i++)这样来一点点遍历的,不仅麻烦而且还费时费力,应该使用更加强的遍历方法,比如:

for (IncandescentLamp lamp : incandescentLamps) {sum = sum + lamp.resistance;}

这样就非常不错,不仅简单而且增强了for循环
2.在写代码之前没有好好分析各种情况,当时没有考虑到并联电路电路出现短路的情况就到后期修改了大量代码,而且还没有更改的非常完美,是非常不应该的。因此在以后进行程序设计时应该考虑清楚了之后再开始写。
3.培养良好的编程习惯:规范的代码缩进、统一的命名规范等,有助于提高代码质量。不断学习新的编程语言和技术,适应市场需求
总结:在家居强电电路3和4中我学习到了
1.在开始编写代码之前,对项目进行详细的规划和时间是至关重要的。这包括设定明确的目标、制定时间表、分配任务以及确定优先级。
2.我学会了如何正确处理异常情况,使用调试和监控应用程序。
要从一下地方需要进一步学习及研究:
1.多学习简便的算法和方法,使代码更加简洁,清晰。
2.多看别人的代码,从中汲取他人的有点并且用于自身。
3.多研究java的类,包等东西,到后面使代码更加高级。
学期总结:在平时作业中多加上一些注释,让题目更加清晰,更加容易理解,样例也不是就只对于一个方面一直修改,而是要对于多方面来提供样例。

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

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

相关文章

我的第三次oop

阅读目录 前言 第四次PTA 第五次PTA 第六次PTA 总结 前言 一:对于java的进一步认识 Java是一种强大、跨平台的编程语言,它以面向对象为核心,拥有自动内存管理、丰富的API和广泛的社区支持。Java的广泛应用领域包括Web开发、移动应用开发、企业级应用以及大数据处理等,其易用…

第三次oop

阅读目录 前言 第四次PTA 第五次PTA 第六次PTA 总结 前言 一:对于java的进一步认识 Java是一种强大、跨平台的编程语言,它以面向对象为核心,拥有自动内存管理、丰富的API和广泛的社区支持。Java的广泛应用领域包括Web开发、移动应用开发、企业级应用以及大数据处理等,其易用…

[算法学习笔记] 树链剖分(重链剖分)

树链剖分(重链剖分)学习笔记概述 树链剖分能将一棵树剖分成若干条链的形式。从而能在树上用一些线性数据结构如线段树,树状数组等维护。树链剖分分为重链剖分,长链剖分,LCT 剖分等。最常用的是重链剖分。本文将讲解重链剖分。 本文将持续更新。 我们接下来给出一些定义。重…

.net8,全网首发:部署为自带环境的前后端分离项目,编译成二进制机器码,防止反编译

环境:win10+.net8+vs2022+vue3(history路由模式)本文只演示在winows上面的部署 目的: 1.防止反编译,增加破解成本 2.更便捷的部署方式,开箱即用 实现: 1.不依赖容器,包括IIS,apache,docker,nginx等 2.更少的文件,所有dll逻辑打包成一个exe文件(如果是win环境是exe…

第7-8次大作业总结

前言: 第七次大作业: 这次大作业中新增了,两个新部件,一个是互斥开关,一个是受控窗帘,互斥开关意味着要用一个电器同时参与两条电路的构建,刚开始我没想好怎么去实现一个电器对两条支路,输出不同的状态,后来想到,不如直接把两个普通开关作为互斥开关的两个属性,把它…

配置自己的免费云主机,阿贝云,免费虚拟主机,免费云服务器

延期需要您在第三方网站发布使用感受,以下是对发布内容的详细要求: (1)比较推荐免费免费云主机,阿贝云,免费虚拟主机,免费云服务器 (2)“阿贝云”"免费虚拟主机"“免费云服务器”,配置使用比较方便简单,正在尝试更多功能,后续使用后再来继续发表 (3)可以…

OOP 7-8总结

oop 7~8总结 前言知识点 整体的知识点与前几次的题目没有太多的不同,每次迭代因为题目要求都有增加,所以会新增一些做法,但是像是继承、集合框架、正则表达式、抽象类、多态以及接口等知识点依然会重复使用,只是用法会不同。 越写到后面我越是意识到算法的重要性。在题目里…

家居强电电路模拟程序的两次迭代(包含最终版本)

目录: 一)前言 二)设计与分析 三)踩坑心得 四)改进建议 五)总结 (2)家居强电电路模拟程序-3: 【1】知识点:ArrayList的运用,物理知识的运用。 【2】题量:较大 【3】难度:较难 在家居强电电路模拟程序的迭代中引出较难的互斥开关 (3)家居强电电路模拟程序-4: 【1】…

免费的数据可视化(PCA、t-SNE和UMAP)网页程序

这是一款免费的数据可视化(PCA、t-SNE和UMAP)网页程序,直接进行在线操作,无需下载。这是一款免费的数据可视化网页程序,直接进行在线操作,无需下载。 URL: https://data-visualization-webapp-by-shuaibingli.streamlit.app/ 总体页面【预处理+可视化(PCA、t-SNE和UMAP)+保…

养老院视频监控智能分析系统

养老院视频监控智能分析系统为养老院提供先进的视频监控智能分析技术手段,构建养老智慧监控和安全智能分析防范体系,用科技手段弥补传统方法和技术在监管中的缺陷,变被动“监督”为主动“监控”。致力于打造智慧养老院,打造人性化托养、智能化运营管理,为各大养老机构减少…

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

关于nchu题目集7~8的总结 一、前言 总结两次题目集的题目的知识点、题量、难度等情况 二、内容[题目[1]](##第三次题目(简略版)) [代码[2]](##我的代码) [设计与分析[3]](##设计与分析) [踩坑心得[4]](##踩坑心得) [改进建议[5]](##改进建议)题目集8最后一题(简略版)1、控制…

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,点击个人信…