首页 > 其他分享 >PTA家居电路模拟3到家居模拟电路4

PTA家居电路模拟3到家居模拟电路4

时间:2024-12-28 17:41:48浏览次数:6  
标签:逻辑 题目 家居 迭代 子类 电路 模拟

目录
一、答题判题程序第四次迭代
1、题目分析
2、题目类图
3、题目时序图
4、题目思路
二、家居强电电路模拟程序第一次迭代
1、题目分析
2、题目类图
3、题目时序图
4、题目思路
三、家居强电电路模拟程序第二次迭代
1、题目分析
2、题目类图
3、题目时序图
4、题目思路
四、踩坑心得
五、改进建议
六、总结
一、家居强电电路模拟程序第三次迭代
题目分析:本次题目是家居模拟电路的第三次迭代,在本次迭代当中,新增加了一个互斥开关,同时因为需要考虑电阻的原因,互斥开关接在不同的引脚的时候电阻不同,因此我增加了一个判断位,判断他究竟是哪一个地方作为输出,以此来改变电阻值,并且判断那一条路有电流,同时本次题目增加了串联电路中含有多个并联电路,需要增加一个存储并联电路的数组。
题目类图:

类图分析:首先我定义了一个总的抽象类,然后这个抽象下面一共三个子类,分别是控制电器子类,家居子类和电路子类,这三个子类又同时作为不同部分的父类,比如控制电器子类当中有控制开关子类,分档控制器子类,连续控制器子类,互斥开关子类,家居子类有落地扇,吊扇,日光灯,白炽灯,窗帘,电路当中有串联电路并联电路
题目时序图:

题目思路:首先我在每一个家居里面增加了设置电阻,进入电压和离开电压,因为题目中关于这些电路的逻辑基本上都差不太多,都是一个输入电压然后内部进行处理逻辑然后再将电压输出因此,只需要给定一个输出电压的逻辑即可,我的做法是想遍历一遍输入,然后给每一个输入都创建一个对应的类,然后将类存入到串联电路的数组当中,然后再根据并联电路包含的序号,将对应串联电路存储到里面,在进行电路的基本设置,比如判断电路是否是出于联通的状态,电路的输入电压以及电器的电阻。经过内部的处理,最后调用各自的打印函数。
处理互斥开关部分逻辑代码

二、家居强电电路模拟程序第三次迭代
题目分析:本次题目在上一次题目的基础上难度再一次加大,这一次题目中多了一个仅支持单向电流的电子元件,这一次作业的难度好大,我并没有完全实现本次作业的功能。
类图:

类图分析:类图的总体逻辑和上一次迭代差不多,在此基础上增加了二极管部分,因为二极管的特性只能允许特定方向的电流通过,因此在二极管的电阻部分增加一个判断,判断是不是和接入方向一致。
题目时序图:
题目思路:在类设计上,新增了二极管 erjiguan 类,用于精准控制电流的单向进出在电路连接流程中,首先依据输入信息创建元器件类,并根据引脚顺序为类内引脚编号,遇到互斥开关时单独判断其状态。接着,妥善处理串联包含串联的复杂情况,将所有非并联电路统一整合到主路内。随后,从主干路开始,循环各个支路的状态,准确判断电路启用状态,进而计算电阻,再算出串联干路电流、并联各支路电流以及对应的电压降。最后,通过传递电压,计算电阻与电流乘积并减去接入引脚电压后向下传递,同时从 GND 口反向出发,将与之直接相连的输出引脚电压纠正为 0,最终完成各个元器件状态及参数的计算。
踩坑心得:类设计的复杂:在多次迭代家居强电电路模拟程序时,类的设计随着功能需求的增加变得愈发复杂。就像处理互斥开关,将其整合进已有类看似便捷,实则引发了一系列连锁问题,如额外的判断逻辑使代码可读性变差,后期维护难度直线上升。而且每一次新功能的添加,例如引入二极管,都要小心翼翼地在原有类结构基础上进行扩展,稍有不慎就会破坏整体的逻辑连贯性,导致代码出现难以排查的漏洞。
没有使用递归的思想:起初面对复杂电路计算,总是习惯性地依赖基础逻辑去实现,特别是在递归算法的运用上,虽然发现了电路结构与递归思想的契合点,但因为不想改动先前迭代的代码所以最终还是没有使用递归的方法,所有的代码逻辑基本都是简单的循环遍历原先的数组,如下图:
改进建议:优化类设计架构:在后续项目开发前,先进行更全面、深入的需求分析,根据功能模块合理划分类,遵循高内聚、低耦合的原则。对于类似互斥开关这样具有特殊逻辑的元器件,考虑单独设计一个类来专门处理其复杂行为,避免污染其他类的纯净性。同时,利用设计模式,如工厂模式来创建元器件类,使代码结构更加清晰,易于扩展和维护。比如这几次迭代的电路中可以使用组合模式,将电路中的元件视为文件夹中的文件,将串联电路视为文件夹,然后递归的使用即可
2、在编写具体逻辑的时候可以尝试一下看看有没有符合的算法逻辑,这样子能极大的减轻开发成本和加强开发的效率。
总结:
作为这个学期最后两次大作业,我完成的并不是很好,总的来说,一些本来可以简单一点的类逻辑,我还是用了很复杂的方法来实现。但也收获到了很多东西,比如在第三次迭代的时候,因为我第二次的代码逻辑需要很大程度的修改,所以我干脆重构了代码,用比较器来区分是哪一个类。同时在类设计方面,随着功能增多,类结构愈发臃肿复杂,像互斥开关融入既有类体系后,额外判断逻辑缠绕其中,极大地破坏了代码可读性,让后期维护举步维艰。同时,在算法运用上,起初未能大胆采用递归思想,局限于简单循环遍历数组,错失优化代码结构、提升计算效率的良机。
这两次的大作业我还是学会了很多东西的,比如加深了子类父类的理解,明白了一些java上提供的更加简洁明了的功能,同时还增加了我的开发能力。
总的来说,这个学期java的学习下来,让我充分地体会了面向对象的思想,明白了java的一些基础语法的使用,明白了很多的设计模式,也知道了自己很多方面的不足。

标签:逻辑,题目,家居,迭代,子类,电路,模拟
From: https://www.cnblogs.com/miaochengyuzhengshuai/p/18637723

相关文章

  • java三阶段总结(家用电路模拟)
    前言第六次题目集知识点:抽象类,抽象类不能被直接实例化!有抽象方法,抽象方法没有方法体,由继承它的子类提供具体实现。抽象类可以看作是一种模板,子类在实现接口方法时,必须实现接口中的所有抽象方法,除非子类也是抽象类在抽象类和接口中,多态体现为父类引用变量可以指向子类......
  • 12.28 CW 模拟赛 赛时记录
    前言还是只管考试的策略,别想其他的每个题控制用时,根据时间选择策略,冷静看题完蛋了是\(\rm{NOIP}\),我们没救了\(\rm{T1}\)怎么办,像是很典的题但是我多半做不出来别人做过容斥的肯定会,但是我就不一样了\(\rm{T2}\)好像也不会做\(\rm{T3}\)基环树上的\(\rm......
  • uniapp - 解决安卓APP运行到真机显示未检测到手机或模拟器,HBuilderX真机调试未检测到
    前言关于此问题网上的教程都无法解决,如果您的情况与我相似,即可解决。在uniappApp项目开发中,解决开发app运行到真机时显示“没有检查到设备”将项目运行到Android手机真机调试却检测不到,实际上已经插上USB数据线了,也开启进入了开发者模式怎么调也识别不到,非常恶心的......
  • 2024.12.28模拟赛
    耳机没电了14:46耳机彻底没电了,可是我明明记得早上充了电的这应该是今年最后一次模拟赛了打了T1正解、T225分暴力与T410分暴力,实际T2挂了15分,总分115,排名第六现在也不知道暴力是怎么WA掉的今日作业T1【签到题】题目大意:给出一个长度为\(n\)的序列\(a_{i}\),要求......
  • 模拟赛 12.28 总结
    A.回文考虑一个串满足要求会是怎样的,他通过左-shift可以变成一个回文串,等价于一个回文串通过右-shift可以变成这个串,那么我们手玩可以发现要么这个串本身就是回文串,要么就是两个回文串且其中有一个长度是偶数拼起来的。首先第一个就不用说了显然满足,第二个的话可以这样想:假设......
  • 题目集7-8总结:智能家居强电电路模拟系统
    一、前言1.1题目背景题目集7和8以智能家居为主题,通过强电电路的模拟设计,引导我们从基本开关电路到多功能调速器和受控设备模拟的深入探索,体现了物联网技术在智能家居中的实际应用。1.2题目特点知识点:涵盖开关逻辑、电路模拟、受控设备特性、并联与串联电路等核心知识点。题......
  • java通过模拟post方式提交表单实现图片上传功能实例
    java通过模拟post方式提交表单实现图片上传功能实例|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-----......
  • 省选模拟赛 1
    link期望100+100+15,实际100+90+0,被卡常+写错文件名。A可以发现一个简单的dp,也就是设\(f_{l,r}\)为删光\([l,r]\)的答案,那么显然有:\[f_{l,r}=\min(\max(f_{l+1,r-1},w_{l,r}),\min_k\max(f_{l,k},f_{r,k}))\]现在是\(O(n^3)\)的,我们需要优化。我们发现,这支持二分答......
  • 『联合省选2025集训』『省选模拟赛1』 Day5 总结
    前言落日沉溺于橘色的海,晚风沦陷于赤诚的爱。省流:省选集训,\(\texttt{BZ13}\)人,\(50+20+0=70\),\(\texttt{rk11}\),因为有两个跟我并列倒一,真的糖丸了,低年级的也考不过。T1不会用\(\text{Bitset}\)查询最低位的\(1\),即便不会,\(\mathcal{O}(\frac{n^3\times\log(n^2)}{\o......
  • 模拟退火算法
    模拟退火方法,全称为模拟退火算法(SimulatedAnnealing,SA),是一种基于概率的通用优化算法,其思想来源于固体退火原理。以下是对模拟退火方法的详细解释:一、基本原理模拟退火算法模拟了物理中固体退火的过程来搜索问题的最优解。在固体退火过程中,固体被加热至高温后缓慢冷却,内部粒子从......