第三次博客总结

news/2024/7/5 20:03:03/文章来源:https://www.cnblogs.com/lfjNB666/p/18275094

《第三次博客》

一.家居强电电路模拟程序-3

  1. 前言

    1>.代码主要功能

      本次迭代的代码功能其实设备之间的连接并没有太多的变化,本次迭代的内容主要是并联和并联串 联的处理,这个功能好实现,因为设计好了串联类和并联类,只要设计好存储并联的集合,做好电 压之间赋值关系即可处理好,多个并联串联的问题,在主电路中存储并联,相关的电压时把这整个         并联当作是一个简单的设备,在计算电压是把这个设备所计算得到的电压再赋值给所对应名称的并 联之中,再进一步在并联的方法中计算本并联中的串联中的设备的电压,做好设备的赋值赋值操 作,本次迭代出来的功能难点在与互斥开关的类的设计,本次的互斥开关由于是三个引脚,所以在 本次的迭代之中我是按照将一个互斥开关,拆分成两个带有引脚表示的简单开关进行来处理,这样 的处理可以使得,后续调节互斥开关的状态时变得更加简单便利,子在本次的迭代之中还新增了一 个类叫做智能窗帘,本窗帘的智能功能是可以根据所有灯光的大小来调节窗帘的开关程度,所以在 计算窗帘的开关程度时,只需便利存储设备的集合,累加出总光照的总和,进而计算出开合程度。
    

    2>.主要知识点

      本次迭代并没有增加很多什么知识点只是利用原来的知识点写出了新的功能和部分,主要知识点都是和集合List,字符串的处理,正则表达式,类的设计相关的知识点,没有增加新 的知识点1.通过 Scanner 和 System.in 来接收用户的输入,实现交互式输入。2.字符串处理:使用了字符串操作方法,如 startsWith、substring、split、charAt 等来处理 用户输入的字符串。3.多态:在往 devices 列表中添加设备对象时,利用多态实现了将不同子类对象当作父类对象来处 理。4.类继承与对象实例化:定义了 Device 类及其子类 Switch、GearSpeedController、 ContinuousSpeedController、IncandescentLamp、FluorescentLamp、CeilingFan,并根据 用户输入的不同类型来实例化相应的子类对象。5.通过对 devices 中的设备进行遍历查找及强制类型转换,实现了根据用户输入操作来对设备进行 状态控制。6.使用了 switch-case 语句块进行根据不同条件执行不同的操作。7.采用了面向对象设计原则,如单一职责原则、开闭原则,使得代码结构清晰、易于拓展和维护。8.遍历循环:使用了 for 循环对设备列表进行遍历操作。
    

    3>.题目的题量

    本题的题量算是一般,因为在主函数的处理方面,增加了一个并联和并联之间的串联,并没有多大的 
    变化,只需要调用并联和串联相关的函数即可,只不过在本次的迭代之中,新增了两个类,而这两个 
    类并没有增加太多的代码的相关内容
    

    4>.题目难度

     在上次的迭代处理好了之后,并联和并联的串联操作,就较好的能处理完成,但是,本次的迭代的互 斥开关较为难处理,所以还是有一定的难度的,所以笨的难度一般,处理好了这个互斥开关还是能写 出来做到满分的
    
  2. 设计与分析

  1. 采坑心得

         addDevices方法不仅添加设备到列表中,还试图通过传入的resistance参数更新总电阻。然 而,这种方法没有考虑到每个设备可能有不同的电阻值,并且应该由设备对象自身来提供其电 阻值。方法命名不一致:Mresistance方法名可能是addResistance的误写,这导致了命名不 一致和可能的混淆。类型检查和向下转型:在judgeCstate方法中,代码使用了instanceof来 检查设备的类型,并随后进行了向下转型。这种类型检查通常不是面向对象设计的最佳实践, 因为它限制了代码的灵活性和可维护性。如果可能,最好使用多态性来避免类型检查和向下转 型。硬编码状态逻辑:在judgeCstate方法中,对于不同类型的设备(如Switch、 MutexSwitch、GearSpeedController等),硬编码了状态判断的逻辑。这使得添加新类型 的设备或修改现有设备的状态逻辑变得困难。未完成的代码:judgeCstate方法的代码被截断 了,这导致我们无法看到完整的逻辑。不完整的代码片段可能导致理解和维护困难。状态表示不明确:cstate字段被用来表示电路的状态(闭合或断开),但没有明确的文档或注 释来解释这个字段的确切含义和用法。缺少异常处理:代码中没有包含任何异常处理逻辑,例 如,在添加设备到列表时,没有检查是否成功添加或处理可能的异常。缺少封装性:虽然类的属性被声明为private(在代码片段中未明确显示,但通常假设),但某 些方法(如setV1_V2)可能允许外部类直接修改内部状态,这可能破坏封装性并导致不可预见 的行为。缺乏文档注释:代码片段中缺乏文档注释,这使得其他开发人员难以理解类的用途、 方法的作用和参数的预期值。缺乏输入验证:在setV1_V2和addDevices等方法中,没有对输 入进行验证,例如检查电压或电阻是否在合理的范围内。这可能导致意外的行为或错误。     
    
  2. 改进建议

          重构电阻计算逻辑:移除addDevices方法中的电阻参数,改为在Device类中定义一个获取电阻值的方法(如 getResistance())。在Series类中维护一个计算总电阻的方法(如calculateTotalResistance()),该方法遍 历设备列表并累加每个设备的电阻值。优化方法命名:将Mresistance方法重命名为addResistance或其他更具描述性的名称。使用多态性:在Device类中定义一个方法(如isOpen()),用于判断设备是否处于开启状态。在judgeCstate方法中,遍历设备列表并调用每个设备的isOpen()方法来判断电路是否闭 合。完成judgeCstate方法:确保judgeCstate方法完整,并且正确地检查所有设备的状态以确定电路的整体状态。添加异常处理:在添加设备到列表时,可以添加异常处理逻辑来确保设备被成功添加,或者处理添加过程中 可能出现的异常。明确状态表示:在Series类中添加文档注释,明确解释cstate字段的含义和用法。增强封装性:考虑将某些属性的访问级别更改为private,并通过公共的getter和setter方法来访问和修 改这些属性。添加文档注释:为类、方法、属性和其他重要部分添加文档注释,以便其他开发人员能够更容易地理解代码的 功能和用途。在设置电压、电阻或添加设备时,添加输入验证逻辑来确保输入的值在合理的范围内,并处理 无效的输入。如果Series类需要处理更复杂的电路逻辑,可以考虑使用设计模式(如组合模式、观察者模式 等)来优化代码将设备(如Switch、MutexSwitch、GearSpeedController等)设计为具有共同接口或基类 的层次结构,以便在Series类中统一处理不同类型的设备。编写单元测试来验证Series类的功能和行为是否符合预期。这有助于确保代码的正确性和稳定 性。
    

一.家居强电电路模拟程序-4

  1. 前言

    1>.代码主要功能

       本次迭迭代只要是增加了计算个个设备电压的两端引脚电压的操作,还有计算个个点电压,还需 要判断个个设备的经过的电流的大小是否超过这个设备的最大电流如果超过则需要输出提示基本设备类和设备子类:实现了一个设备控制系统的基本框架,包括了设备类(Device)、控制设备类 (ControlDevice)、开关类(Switch)、分档调速器类(GearSpeedController)、连续调速器 类 (ContinuousSpeedController)、受控设备类(ControlledDevice)以及多种具体的受控设备 类 (如白炽灯、日光灯、吊扇、落地扇等)。其中,设备类包括了设备的基本信息和属性,并且设备类为其他类提供了基本的属性和方法继承; 控制设备类是设备类的子类,用来实现具体的设备控制逻辑;开关类实现了开关设备的功能,可以 切换开关状态并输出相应电压;分档调速器类实现了分档调速的功能,可以根据档位调整输出电 压;连续调速器类实现了连续调速的功能,可以根据速度因子调整输出电压;受控设备类是设备类 的子类,用来实现具体的受控设备的输出计算逻辑;最后,具体的受控设备类(如白炽灯、日光 灯、吊扇、落地扇)分别实现了自身的输出计算逻辑,根据不同的电势差计算出相应的输出值。其次是并联和串联类:这段代码主要是实现了电路中串联电路和并联电路的计算功能。其中 Series 类表示串联电路,包括添加设备、计算总电阻、判断电路状态(闭合或断开)、计算设备 之间的电压差等功能;Parallel 类表示并联电路,包括添加串联电路、计算总电阻、设置电压差 等功能在 Series 类中,通过 addDevices 方法可以向串联电路中添加设备并计算总电阻,通过 judgeCstate 方法判断串联电路中各设备的状态,通过 devicesV1_V2 方法计算各设备的电压 差。而在 Parallel 类中,通过 addCDevices 方法向并联电路中添加串联电路并计算总电阻, 通过 devicesV1_V2 方法设置并联电路中各串联电路的电压差。对于电压的计算部分:遍历第一系列(series1)中的电器设备,查找名称为"M1"的设备,将该设 备的电阻设置为并联电阻的值,并重新给"M1"设备赋予这个电阻值。根据第一个电路设备的类型进行判断,计算总电路的电压:如果是开关设备(Switch),根据开关状态设置电压为220.0或0.0。如果是齿轮速度控制器(GearSpeedController),获取其输出电压。如果是连续速度控制器(ContinuousSpeedController),获取其输出电压。否则将电压设定为220.0。将计算得到的电压赋值给总电路,并计算总电路中各个电器的电压。遍历总电路中的设备,如果设备名称是"M1",则将其电压赋值给并联电路。对并联电路中的每个串联(Series)进行计算各个电器的电压。最后使用排序的代码对于个个设备的类型和编号进行排序输出个个设备的状态
    

    2>.主要知识点

     以下是代码涉及到的主要知识点1.通过 Scanner 和 System.in 来接收用户的输入,实现交互式输入。2.字符串处理:使用了字符串操作方法,如 startsWith、substring、split、charAt 等来处理 用户输入的字符串。3.多态:在往 devices 列表中添加设备对象时,利用多态实现了将不同子类对象当作父类对象来处 理。4.类继承与对象实例化:定义了 Device 类及其子类 Switch、GearSpeedController、 ContinuousSpeedController、IncandescentLamp、FluorescentLamp、CeilingFan,并根据 用户输入的不同类型来实例化相应的子类对象。5.通过对 devices 中的设备进行遍历查找及强制类型转换,实现了根据用户输入操作来对设备进行 状态控制。6.使用了 switch-case 语句块进行根据不同条件执行不同的操作。7.采用了面向对象设计原则,如单一职责原则、开闭原则,使得代码结构清晰、易于拓展和维护。8.遍历循环:使用了 for 循环对设备列表进行遍历操作。9. 访问修饰符(Access Modifiers):private 修饰符用于限制属性的访问范围,确保它们只能在类内部被访问10.接口和抽象类(尽管在示例中未直接显示):接口和抽象类允许定义不完整的类结构,其他类可以实现这些接口或继承这些抽象类来提供具体的实
    

    3>.题目的题量

     本次迭代的本题的题量是很多而且本次的新增的内容不是很多但是,本地的电压反面的处理较为复杂 与麻烦,本次的迭代之中考虑的并联里面包含了并联的操作,在本次的电压处理中点的更为复杂很容 易产生错误,所以本次所迭代的代码的数量较为多,较为复杂,最为复杂的是二极管和互斥开关的引 脚电压的处理,在这方面的代码的处理需要编写相关的代码较为多,代码的量较多,我本次迭代的代 码的长度为1000多行所以较为复杂
    

    4>.题目难度

      本次的题目难度较为复杂,在本次的作业中我的测试点只过了七十多分的,整体的难度为一般,但 是对于部分的电压处理还是较为复杂的
    
  2. 设计与分析

  1. 采坑心得

        成员变量V1_V2的命名可能不够直观,因为它似乎表示两个电压之间的差值,但名称中包含了下 划线,可能让人误解为是两个独立的电压值。建议考虑更清晰的命名,如voltageDifference。Mresistance方法的命名不符合Java的命名规范,通常应该使用小写字母开头,并使用驼峰命名 法。例如,可以将其重命名为addResistance。 在judgeCstate方法中,检查电路中的设备(如开关和二极管)来确定电路是否闭合。但是,该方法没有返回任何值,也没有修改 cstate成员变量。需要修改此方法以返回电路的状态,或者更新cstate的值。二极管的状态:在judgeCstate方法中,我检查了二极管(Diode)的state成员变量。但是, 二极管是否“正向”通常不仅仅取决于其state变量,还取决于电流的方向和电压的极性。添加设备的方法:在addDevices方法中,我同时添加了设备和其电阻值。但是,这种方法假设 每个设备都只有一个固定的电阻值,这可能不适用于所有类型的设备需要考虑一个更通 用的方法来添加设备,并允许在稍后设置或修改其电阻值。电压和电流的计算:在您的类中,虽然您存储了电压和电流的值,但您没有提供方法来计算这些 值。在串联电路中,总电压是各个设备电压之和,总电流在各个位置是相等的。需要添加 方法来计算这些值。来简化我的步骤,在我的方法之中的步骤很多没有使用函数来多次调用
    
  2. 改进建议

         class Series {  private final String name;  private double totalResistance;  private double current;  private boolean isClosed = false;  private double voltageDifference;  private List<Device> devices;  public Series(String name) {  this.name = name;  this.devices = new ArrayList<>();  }  public void addDevice(Device device) {  // 假设Device类包含获取电阻的方法  this.devices.add(device);  this.totalResistance += device.getResistance(); // 假设有            getResistance()方法  }  public boolean isClosed() {  return isClosed;  }  public void calculateState() {  isClosed = true; // 假设初始为闭合  for (Device device : devices) {  if (device instanceof Switch && !((Switch) device).isClosed()) {  isClosed = false;  break;  }  // 添加对其他设备类型的检查...  }  }  // ... 其他方法,如计算电压、电流等  }  // 示例的Switch类  class Switch implements Device {  private boolean isClosed;  private double resistance; // 当开关闭合时的电阻  // ... 构造函数、getter、setter等  public boolean isClosed() {  return isClosed;  }  // ... 其他方法  }
    

总结:

  在作业7的迭代之中,增加了互斥开关和智能窗帘两个类,这两个类中较为难处理的就是互斥开关的处 理,重点在于互斥开关的类的设计,本次的类的设计之中我将一个互斥开关拆分成了两个普通开关,与 普通开关不同的是这个开关带有引脚号2 3,还有一个重点是并联与并联的串联,做好并联与并联的串 联需要将并联当作是一个带有电阻的设备,简化成一个整体来进行操作,将这个简化的整体赋值电阻, 在总串联设备之中计算电压,最后将并联里的设备进行计算电流和电压的操作,处理好这两个重点基本 就可以完成大部分的测试点在作业8的迭代之中,第一个重点是并联里面包含了并联的这个功能,需要处理号这个功能就需要将电 路简化,最间的方法就是将并联整体看作是一个具有电阻的设备去处理这个重点,最后容易出错的点是 在电压的计算过程之中,电压的赋值操作,由于是并联里面含有并联所以这个电压的赋值操作较为麻 烦,容易出错。第二个重点就是计算个个设备的引脚电压的操作,计算引脚的电压需要计算好这个设备 的电势差,还需要计算这个设备的引脚的初始电压,而初始电压的计算需要从开始220起始开始计算, 所以简单的并联包含并联的电路还是能计算出来,但是本题的难点是二极管和互斥开关的计算过程,二 极管的计算需要考虑的条件我也没有太搞明白,最后四个测试点没有同学通过,互斥开关的计算也较为 麻烦,主要是互斥开关具有三个引脚本次的电路系统的四次迭代完成,整体来说还算不错,通过了大部分的测试点,但是不足的地方还是有 很多,在我自己编写的代码的时候我只会考虑代码的逻辑而不太会考虑代码的可读性,所以我的代码 的长度还是较为隆长不太容易理解,本次的迭代之中我也学习到了很多的知识点,主要学习到的是根据 题目去编写相关的代码功能这一思路的提升,加油~

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

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

相关文章

2024志愿填报

推荐度由上往下,学校课程只教一小部分,就业需根据自己的方向往深处学。 一.河南工程 1.软件工程(智慧电网):属于电气信息工程学院。(可从事软件开发,物联网工程师等岗位) 课程:以课程内容来看比较全面,主要方向是软件及通信。涵盖了从设备-网络-软件-数据,其中MATLA…

大型语言模型如何工作?

引言 本文旨在以浅显易懂的方式,向读者阐释大型语言模型(LLM)的工作原理。 我们首先看一下文档补全引言 本文旨在以浅显易懂的方式,向读者阐释大型语言模型(LLM)的工作原理。 我们首先看一下文档补全器模型的工作原理:user prompt: A banana ismodel response: an elong…

idea配置sftp连接服务器

一、配置本机密钥,用于连接服务器使用 ssh-keygen命令,一路回车,生成公钥ssh-keygen -t rsa 公钥内容保存在:/Users/yf/.ssh/id_rsa下,并且将生成的文件内容复制到服务器的 ~/.ssh/authorized_keys 文件中,然后就可以在本机使用 ssh root@ip 进行连接服务器了二、配置id…

第三次博客作业-家居强电电路模拟程序3-4 blog-3

一、前言:在完成了家具强电电路模拟程序-1与家具强电电路模拟程序-2的基础上,这套家具强电电路模拟程序又经过了两次迭代,我也和解决之前迭代问题一样,先对增加的需求进行分析,然后设计我的程序,最后编写代码。在难度方面,家具强电电路模拟程序-3相对于家具强电电路模拟…

Linux服务器如何测试存储盘性能是否正常?FIO磁盘压测工具的使用详解

fio是一种I/O工具,用于基准测试和压力/硬件验证。它支持19种不同类型的I/O引擎(sync,mmap,libaio,posixaio,SG v3,splice,null,network,syslet,guasi,solarisaio等)针对磁盘的压力性能测试工具有很多,简单的测试可以通过dd命令实现,而比较专业和强大的磁盘IO测试…

(循环序列DP)牛客小白月赛88 D我不是大富翁

题意:思路: 考虑dp,题目显然提到2个状态:位置和操作次数,因此设置dp[i][j]表示在i位置第j次操作是否合法。 易得状态转移方程: dp[(i + a[j]) % n][j] |= dp[i][j - 1]; dp[((i - a[j]) % n + n) % n][j] |= dp[i][j - 1]; code: #include <bits/stdc++.h> #inclu…

题目集7~8的总结性Blog

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

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…