题目集7~8的总结性Blog

news/2024/10/5 6:42:11/文章来源:https://www.cnblogs.com/orangecookie/p/18274439

7~~8次大作业总结

前言

没有了测试点说明,真是非常的艰难,不知道有什么情况,也不知道哪里的答案错了,就很难找,也很难做出修改。测试样例也是,数量不多,情况不多,特别是最后一次的,测试样例也没错,试了几种情况,都没错,也不知道是哪里错了,最后就不了了之了。

第七次大作业

1.知识点:新增了互斥开关,就要考虑其内部管理两个对应的接口和通路状态。需要考虑不同接口间的电阻。可以为每个接口定义电阻值,并确保在开关状态变化时正确地模拟电路中的影响。抽象出具体的写法,考虑不同情况。串联并联环环相扣,智能窗帘。遍历电路,获取信息,排序调整

7-7 家居强电电路模拟程序-3

电路嵌套,多个并联电路串联在一起的情况,一条串联电路中包含其他串联电路,这并不想我想的那么简单,需要考虑很多细节,从输入开始都要调整,确保每个电路单元能够正确接收和处理输入信号,并将输出传递给下一个级联的电路单元。还有互斥开关,开始以为和普通的开关差不多,只是多了一个引脚,后来发现比这复杂得多。新元件智能窗帘,需要从电路中获取亮度再根据亮度调整窗帘的开闭程度

class Curtain extends Device//智能窗帘
{int open=100;//打开百分比public Curtain(String id) {super(id);this.r=15;}public int calculateOutput(SeriesCircuit series1,List<ParallelCircuit> parallels) {//所有设备集合int bright = 0;//遍历所有设备集合,计算总光照强度for (Device device : series1.devices) {if (device instanceof WhiteLight) {//BWhiteLight B = (WhiteLight) device;bright = bright + B.getbright();//白炽灯的亮度} else if (device instanceof SunLight) {//RSunLight R = (SunLight) device;bright = bright + R.getbright();//白炽灯的亮度}}for (ParallelCircuit parallel : parallels) {for (SeriesCircuit series : parallel.seriesCircuits) {List<Device> devices = series.getDevices();for (Device device : devices) {if (device instanceof WhiteLight) {//BWhiteLight B = (WhiteLight) device;bright = bright + B.getbright();//白炽灯的亮度} else if (device instanceof SunLight) {//RSunLight R = (SunLight) device;bright = bright + R.getbright();//白炽灯的亮度}}}//遍历总电路和两个电路//}if (diff >= 50) {if (bright >= 0 && bright < 50)open = 100;if (bright >= 50 && bright < 100)open = 80;if (bright >= 100 && bright < 200)open = 60;if (bright >= 200 && bright < 300)open = 40;if (bright >= 300 && bright < 400)open = 20;if (bright >= 400)open = 0;}return open;}
}

第八次大作业

1.知识点
获取,输出电压,判断条件,根据电压值的不同范围或其他条件来采取不同的处理措施。根据电路的类型或功能模块,将具有相似处理逻辑的电路单元分为不同的类或组。每个类可以有自己的处理方法,以确保每个电路单元都得到适当的处理。输出特别注意格式,子类对父类方法重写,使用时多态调用简化代码逻辑。

7-1 家居强电电路模拟程序-4

二极管,只能单向流通,在设计电路时考虑二极管的导通和截止状态,以及其在电路中的位置和作用。看起来很复杂的并联串联并联,重重叠叠。这次有了电流限制,也就是错误情况,还要区分电流过载和短路。这次真是很难啊,还没有测试点说明,甚至和我的物理知识不太一样了。

class Diode extends Device{boolean state;public Diode(String id,boolean state){//二极管是否正向super(id);this.state=state;//}public void judgeMaxI(double I){if(I>8){this.MaxI=true;}}
}case 'P': {String name = pats1[0];if (pats1[1].equals("1")) {//如果二极管是正向Diode P=new Diode(name, true);P.setForward(pats1[1]);//判断是否正接seriescircuitmain.addDevices(P);//创建正向二极管} else {Diode P=new Diode(name, false);P.setForward(pats1[1]);//判断是否正接seriescircuitmain.addDevices(P);//创建反向二极管}break;}

判断电流

public void judgeMaxI(double I){if(I>14){this.MaxI=true;}}

设计与分析

7-7 家居强电电路模拟程序-3

复杂电路支持: 目前的设计主要针对串联电路,未来可扩展并联电路、桥式电路等复杂电路的支持,以提高模拟的通用性和实用性。
性能与效率: 随着电路复杂度增加,当前逐个设备遍历更新的状态计算方式可能会效率低下。优化算法,如预先计算静态部分减少实时计算负担,将是重要的改进方向

7-1 家居强电电路模拟程序-4

时间复杂度
设备管理与更新: 对于单个设备的操作,如更新状态或判断电流是否超限,时间复杂度接近O(1),因为它们主要依赖于设备自身的属性操作,不涉及循环或递归。
串联电路处理: 在SeriesCircuit类中,judgestate和devicesdiff方法的时间复杂度主要取决于串联设备的数量。遍历设备列表以判断闭合状态或计算电压电流,时间复杂度为O(n),其中n是设备数量。如果电路中包含大量设备,这部分操作可能会影响性能。
空间复杂度
对象实例: 由于每个设备都是一个独立的对象,且可能存在多个串联电路实例,空间复杂度与电路中设备总数成正比,为O(m+n),m代表不同类型的设备实例数量,n表示串联电路实例数量。对于大规模电路模拟,内存占用会随着电路复杂度增加而显著增长。
可读性与可维护性
类结构清晰: 设备基类与派生类的划分使得代码结构清晰,易于理解各部分职责。继承和多态的使用提高了代码的复用性。
方法重写: 子类中重写了父类的方法,如updateState和judgeMaxI,这种设计使得每个设备的行为逻辑得以定制化,同时也保持了代码的整洁。
注释缺失: 代码中缺乏注释,特别是在一些逻辑处理的地方,这可能会影响代码的可读性和后续维护。添加详细注释,解释类、方法的作用及关键逻辑,会极大提高代码的可维护性。
扩展性
面向对象设计: 当前设计很好地利用了面向对象的特性,为未来添加更多类型的设备或电路类型提供了良好的扩展基础。新的设备只需继承Device并实现相应逻辑即可。
电路类型限制: 当前代码主要集中在处理串联电路,若需支持并联、混联等复杂电路,还需设计相应的电路类并实现其独特逻辑,这将增加系统的复杂度。
性能考量
递归与循环: 在处理复杂电路时,若存在多级嵌套(如串联电路中包含并联电路),目前的实现方式可能需要进一步优化,避免递归或深循环导致的栈溢出或性能瓶颈。
动态规划: 对于某些复杂电路状态的预计算和缓存,可以采用动态规划等策略减少重复计算,提高运行效率。

踩坑心得

细节!!!一定要注意细节,在复杂电路设计中,确实细节至关重要。在修改代码时,不仅要关注新增的部分,还要特别注意内部的小细节,因为即使是一个小改动,也可能对整体功能产生重大影响。如果不彻底修改相关部分,可能会导致难以找到的错误。毕竟,逐行检查成百上千行的代码是一项相当痛苦的任务。还不一定能找到!
此外,在电路连接方面也要特别注意清晰度,确保电流分配和电压计算的准确性。最后,输出格式问题通常源于细微的空格或换行错误,这些细节在复杂的代码和文档中尤为常见。
这是最后一次输出的格式错误,也许是少了空格,也许是多了换行

改进建议

先设计类,再进行代码的编写
在编写代码之前,首先进行良好的类设计。良好的抽象和模块化设计有助于提高代码的可重用性和可维护性。每个类应该清晰定义其责任和行为,以便未来的扩展和修改更为简便。
类的复用性:
通过良好的类设计,可以最大化代码的复用性。这对于在复杂电路中添加新的组件或功能模块是非常有帮助的,因为你可以构建通用的接口和方法来处理不同类型的开关、电路或控制逻辑,类设计好了,对代码的复用是很有帮助的,可以为我们省很多事
系统的扩展性:
通过良好的设计和抽象,确保系统具备足够的扩展性。这意味着能够轻松添加新类型的开关、电路或控制逻辑,而不需要对现有代码进行大规模修改。
通过良好的抽象和设计,系统应具备足够的扩展性,以便轻松添加新类型的开关、电路或控制逻辑。
设计时要考虑到不同情况下的变化和需求,例如异常情况处理、动态配置和用户定制功能。
尽可能覆盖各种可能的输入情况是一种策略。通过编写多个测试用例,包括各种情况下的输入数据和预期输出
测试用例的编写:
编写多个测试用例是一种有效的策略,尤其是覆盖各种可能的输入情况。这包括正常输入、异常输入以及边界情况(如最大和最小输入值、空输入等)。通过这些测试用例,可以发现和解决代码中的潜在问题,确保系统在各种情况下的稳定性和正确性。

总结

写代码的过程让我发现,失之毫厘差之千里。这次电路的设计不仅考验大学的编程知识还考之前的物理哈哈哈,不得不让我沉睡已久的记忆复苏了。有很多东西都是想得简单,实际操作起来难,思考的时候感觉也不过如此,真正上手的时候才发现困难重重。
尽量覆盖各种可能的输入情况,包括正常输入、异常输入以及边界情况
当测试样例无法通过时,使用调试工具逐步执行代码,检查每个步骤的执行情况和结果,找出潜在的问题。
特别关注边界条件,例如最大和最小输入值、空输入等,这些情况经常是导致问题的根源。
在处理复杂电路设计时,良好的类设计、模块化编程和全面的测试策略是确保成功的关键

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

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

相关文章

Python用PyMC3实现贝叶斯线性回归模型

原文链接:http://tecdat.cn/?p=5263 原文出处:拓端数据部落公众号在本文中,我们将在贝叶斯框架中引入回归建模,并使用PyMC3 MCMC库进行推理。 我们将首先回顾经典频率论的多重线性回归方法。然后讨论贝叶斯如何考虑线性回归。 用PyMC3进行贝叶斯线性回归 在本节中,我们将…

SPSS用K均值聚类KMEANS、决策树、逻辑回归和T检验研究通勤出行交通方式选择的影响因素调查数据分析|附代码数据

原文下载链接:http://tecdat.cn/?p=27587 最近我们被客户要求撰写关于通勤出行的研究报告,包括一些图形和统计输出。 某交通工程专业博士生想要研究不同因素对通勤交通方式选择的影响,对成都两个大型小区(高端和普通)居民分别进行了出行调查,各调查了300人 其中 Distanc…

【专题】2024全国主要城市工业互联网发展指数报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=36590 原文出处:拓端数据部落公众号 《报告合集》详细分析了全国工业互联网主要城市的产业发展特征,揭示出这些城市在互联网产业上表现出较高水平。据工信部等部门发布的2023年度数据,这些主要城市汇聚了全国94%的双跨平台、92.3%的大数据产…

CodeFormer一款既能图像修复、还能视频增强去码的AI软件(下载介绍)

CodeFormer是一款强大的人工智能工具,主要用于图像和视频的修复和增强。它基于深度学习技术,特别是人脸复原模型,可以轻松修复和增强面部图像,提升照片和视频的质量和视觉效果工作原理 1、通过自动编码器实现人脸的变换,包括色彩化、清晰化、去马赛克修复等功能 2、采用了…

OOP课第三阶段总结

OOP课第三阶段总结 前言:我想说的第一句是:”我感受到了设计上的极大缺陷“,从一开始,我完全就忽略了引脚的存在。因为在第二阶段中,家电模拟大作业一、二在不需要考虑引脚的情况下也可以完成。但是当来到第三次,出现了互斥开关,因为互斥开关的特殊性,它具有1、2、3三个…

头歌实践教学平台-机器学习 --- PCA-答案

非盈利文章,仅提供编辑器内的答案或代码,不提供启动服务及需要命令行的代码 第1关:维数灾难与降维第2关:PCA算法流程import numpy as npdef pca(data, k):对data进行PCA,并将结果返回 :param data:数据集,类型为ndarray :param k:想要降成几维,类型为int :return: 降维…

头歌实践教学平台-机器学习 --- PCA答案

非盈利文章,仅提供过关答案或代码,不提供启动服务及需要命令行的代码 第1关:维数灾难与降维第2关:PCA算法流程import numpy as npdef pca(data, k):对data进行PCA,并将结果返回 :param data:数据集,类型为ndarray :param k:想要降成几维,类型为int :return: 降维后的数…

线段树题单记录

写线段树题单的记录线段树题单记录 线段树的题都很板的,模板敲上去再改改就行 P3372 【模板】线段树 1 题目 Link 为什么模板是绿题,还有下面那道 思路 首先我们要明白它为什么叫线段树: OI Wiki 上的这张图很好理解:从这张图也可以看出来,线段树的每个节点管辖的一个又一…

PTA训练集阶段总结性blog(第三弹)

目录PTA训练集总结blog1.前言2.设计与分析题目集七 7.1家居强电电路模拟系统—3关于设计要求:UML类图及设计分析:部分源码:复杂度分析:题目集八 7.1 家具强电电路模拟系统—8关于设计要求:部分源码:复杂度分析:3.踩坑心得4.改进建议5.总结 PTA训练集总结blog 1.前言 1.这…

智慧工厂视频智能分析系统解决方案 燧机AI算法

视频监控智能分析系统通过安装在工厂生产施工作业现场的各个监控装置,构建智能监控分析预警和防范体系,有效弥补传统方法和技术在管理中的缺陷。智慧工厂视频监控智能分析系统实现对人员、机械、材料、环境的全方位实时监控,变被动“监督”为主动“监控”;真正做到事前预警…

从零开始学Spring Boot系列-集成Spring Security实现用户认证与授权

在Web应用程序中,安全性是一个至关重要的方面。Spring Security是Spring框架的一个子项目,用于提供安全访问控制的功能。通过集成Spring Security,我们可以轻松实现用户认证、授权、加密、会话管理等安全功能。本篇文章将指导大家从零开始,在Spring Boot项目中集成Spring S…