OOP第7-8次作业总结

news/2024/10/5 12:22:43/文章来源:https://www.cnblogs.com/ymzfr/p/18274505

前言

时光飞快, 转眼就到了学期末尾。从第七次作业开始,作业便开始加难度了。第七次作业加了互斥开关和窗帘,但是这次的电子元件不能像之前简单的写如同写商品类这样简单的写出,需要思考如何设计这个电器类。并且,在加上上面两个类的基础上,电路开放了串联电路中有串联电路以及干路上存在多个并联电路的电路情况。这就要思考如何设计用来检查开关、电阻以及电压的方法。而第八次作业开放的电路情况是并联电路中包含并联电路。也就是用递归的方法对开关、电阻以及电压进行处理。

分析:

<1>

设计与分析:

互斥开关,也就是单刀双掷开关,需要考虑它的刀头在执行完操作之后到底接到了哪一条支路上。当然,这只是当互斥开关两端都有连接到电路的情况。如果它只有一端有连接电路,那么它便与普通的开关并无一二。于是,我便先new了电路类,再new了互斥开关,并把电路根据2、3引脚用HashMap保存。如果HashMap的size等于1的话,那么它便相当于普通的开关,当然,如果HashMap的size等于2的话,便根据设置的刀头属性是2还是3,那么HashMap中key值为3或2便是断路,同时,因为互斥开关只可能在主干路上或者在串联电路上,所以写开关检查方法的时候只用检查主干路上和串联电路便可以了。
同时,电路开放的串联电路中有串联电路以及干路上存在多个并联电路的电路情况将电路结构分成了两层。就像吃多层蛋糕一样,我们会从最高层开始逐步往下吃,新加的电路情况也要先计算完串联电路中的第二层串联电路上的开关、电阻以及电压情况。再计算第一层串联电路上的开关、电阻以及电压情况。当时为了图简便,直接在上次代码把不同的电路种类一依次循环计算的基础上,在串联电路的外面再加入一层的循环使它完整运行两遍,便能处理出来。
image
image

踩坑心得:

1.未思考清楚,因为写代码时把电路分为了主干路、并联电路、串联电路三种类,所以下意识的把主干路从串联电路中分离出来,导致对主干路进行开关检查的时候跳过了主干路上的串联电路断开的情况。
image
2.在进行开关检查时开始的判断方法是获取电路的名字后去除它后面的数字,如果剩余的字符串是“T”,那么便是串联电路。但是,因为我的主干路在new时并没有把它的名字一并存进,所以它的名字属性的字符串为null,导致非零返回。所以把判断条件改为电路名字是否为空。
image
3.忘记了电子元件是按名字序号进行顺序输出的。最开头按照先后出现顺序把新加的电子元件存入HashMap中。后面把key值改为了名字序号变好了。
4.没看清楚题目要求,“当电压低于50V,窗帘不工作,默认为全开状态。”这点在窗帘的打开程度计算中漏掉了没写。
5.计算精度损失。因为窗帘的打开程度计算是根据整个电路上的所有灯的亮度总和来进行判断计算的,所以在计算灯亮度总和时,因为把double类型的数据强制转换成int类型,一次次循环把误差变得有点大,导致窗帘的打开程度出现了偏差。

改进建议:

这也是当然当时也没考虑清楚,其实这时的电路就应该必须采用递归的方法对开关、电阻以及电压进行处理。因为这时的电路就已经不是单纯的二层电路了。它已经有串联电路中含串联电路中含串联电路,串联电路中含串联电路中含串联电路中含串联电路的电路情况,再进一步,串联电路中含串联电路中含串联电路······这样可以无穷多层。可能这次pta没过的测试点也有三层的情况。

<2>

设计与分析:

第八次作业开放的电路情况是并联电路中包含并联电路,也就是说,不能简单的把不同的电路种类依次循环计算,第七次还好,只是加上了串联电路中有串联电路,还能通过循环大致完成,但是加入了并联电路中包含并联电路的第八次作业就不是简单的加循环能解决的了。在各种电路中都可能包含并联电路和串联电路的情况下,如果要那样写会写的十分复杂。所以毫无疑问的选择了用递归进行解答。然后,因为无论是在电路闭合断开检查还是在电阻电压计算方面,主干路因为本质上就是串联电路,所以主干路和串联电路的电路闭合断开检查方式还是在电阻电压计算方式都十分的相近。所以我又新建了个电路类,三类电路继承至电路类。这样便能通过new一个电路类来调取属于电路的方法,可以把电路闭合断开检查还是在电阻电压计算中的主干路和串联电路情况合并到一起。
这次作业除了加入了并联电路中包含并联电路的情况,还加入了二极管、电流超限警告和输出形式修改。其中当属输出形式修改十分麻烦,题目要求把引脚1和引脚2上的电压值依次输出。乍看之下,好像十分的简单,但对于物理不好且许久没碰过物理的人来说,其实一点也不简单。要考虑的情况也不少。而且别忘了,第七次作业可是加了个麻烦的东西--互斥开关。要让这个东西正确输出可比其他电子元件难几倍。对于一般的电器,也是简单的加个引脚序号属性,先计算电压,左引脚电压等于上一个电器的右引脚电压,右引脚电压等于左引脚电压减电压,至于其他的特殊情况便不一一赘述了。而有关互斥开关的判断和输出大体上也跟前面的大差不差,只是情况更复杂而已。
image
image

踩坑心得:

1.数据精度错误。题目对于电压的要求是int类型,在输出时不能用“%。0f”进行输出,因为这样对数据是四舍五入。我在输出时对电压进行强制类型转换舍去小数点后面部分便可以了。
2.对于电路短路的情况判断错误。最开头对电路短路的情况判断为主干路的电阻等于零,忽略了当主干路断路的情况,导致主干路断路断路的情况下依旧会输出“short circuit error”。
3.忽略了并联电路上的一条串联电路短路的情况。当并联电路上的一条串联电路短路的时候,这时无论这条并联电路上其他串联电路是什么情款,这条并联电路上的电阻均为0。
4.互斥开关断开的那条支路所连接的引脚当时想当然的认为是0,其实对于那个引脚的情况处理和处理其他断路上电子元件的引脚电压是一样的。
5.计算主干路初始电压时忘记用set方法保存更改后的电压,因为是和串联电路放在一起,所以读取电压时是读取左引脚电压而不是电路总电压,导致即使主干路有调速器,主干路的初始电压还是以220v去计算。
6.在进行电路闭合断路情况判断时,对于并联电路,只要找到一个串联电路是闭合的,就会跳出并联电路中电子元件的循环,导致一些串联电路的闭合断路情况根本没有进行判断,就跳到了下一步的电阻计算,直接导致了后面一系类的计算错误。

改进建议:

对于有些方法,写的时候逻辑没理顺,导致代码过多且复杂难懂,需要精炼简化对方法的实现。对于通过许多get得到的数据new一个相应的数据类型进行获取使代码更容易理解。

总结:

通过这两次作业,我加深了对递归的理解,明白了通过思考,使用递归等方法,不断简化自己的代码,不仅是让别人更易看懂自己写的代码,而且也锻炼了自己,提高了自己的能力。这一个学期的学习,我学习到了Java的三大技术特性:封装、继承、多态,学习到了七大设计原则:单一职责原则、开闭原则、里氏代换原则等,还有设计模式。写代码时要面向对象程序设计,要遵守七大原则,熟连运用三大特性(封装,继承,多态)和23个设计模式。要培养缜密的思维,把握住细节,使代码更具有严谨性,不至于写完之后有太多没考虑或者写错的点。同时也要不断提高代码各个类的内聚性,降低各个类之间的耦合度。

评价:

讲课基本没有什么问题,不过既然出了网课,能把设计模式什么的其它上课讲的内容也在网课上备份一遍就好了。

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

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

相关文章

[C++ Primer] 泛型算法

记录了C++标准库提供的泛型算法相关重难点。泛型算法 初识泛型大多数算法定义在头文件algorithm中。标准库还在头文件numeric中定义了一组数值范型算法。那些只接受一个单一迭代器来表示第二个序列的算法,都假定第二个序列至少与第一个序列一样长。 // v2中的元素数目应该至少…

prometheus指标终端绘图工具

最近搞了一个prometheus 指标终端展示工具,有兴趣的可以试试:本文来自博客园,作者:charlieroro,转载请注明原文链接:https://www.cnblogs.com/charlieroro/p/18274557

CC4+CC5分析利用

CC4+CC5分析利用 CC4分析与利用 学了前面的cc2,其实cc4就是将cc2使用的InvokerTransformer替换成InstantiateTransformer来加载字节码(CC3里面有说)。 把最后调用的transform方法改为:Transformer[] transformers = new Transformer[]{new ConstantTransformer(TrAXFilter.…

DApp设计与开发 课程笔记(三):erc20 | erc721

笔记对应课程内容为成都信息工程大学区块链产业学院老师梁培利的DApp 设计与开发 07-09 课 笔记中提到的名词不做过多解释 不懂就搜!ERC-20区块链专业的学生需要熟知erc20的接口,不看代码的前提下能够独立完成,至少你要知道有哪些属性和函数接口。balanceof, address, balan…

大白话讲解会计科目

大白话讲解会计科目

15款主流项目进度软件对比

15好用的款主流项目进度管理软件:PingCode、Worktile、Trello、Tower、Asana、Smartsheet、Teambition、ClickUp、Wrike、Monday.com、Notion、禅道、飞书、云效、蓝凌。严格的进度管理有助于更好地控制项目进展,提升团队效率,最终实现项目成功。一个好的项目进度管理工具可…

《护士长的工作!》——开发日志

正文 2024/6/28 23:00 终于整完啦!开导开导!定个时间发布,睡觉咯... 2024/6/28 接下来是调音时间!大概就是加个bgm,然后把声优大大们的声音跟人物动画手动对齐,必要时还得去网上搜一搜音效给加上...然后音量大小调整到-6到-12dB区间balabala... 有时候会遇到音频和自己做…

nchu-oop训练集7~8总结

一、前言 训练集的练习已经到达了尾声,通过这些训练集,我们将进一步加深对OOP概念的理解,并学会如何运用这些原则来设计和开发更加灵活、可维护、可扩展的软件系统。在程序中,我们学习如何模拟不同类型的电路组件,如电源、开关、插座、灯具等,以及它们之间的连接方式和电…

PTA题目集7-8的总结性Blog

一:前言: 1. 知识点总结: ①:递归的使用 ②:java面向对象类和对象的基本用法 ③:关联类,依赖类和组合等类间关系 ④:正则表达式的运用 ⑤:接口的基本使用 ⑥:Comparator接口及比较器基本使用 ⑦:ArrayList的基本使用 2. 题量: 较少,每次题目集只有1题 3. 难度: 由…

实战篇——Burpsuite工具BruteForc靶场实战

实战篇——Burpsuite工具BruteForc靶场实战 BurpSuite是一款强大的渗透工具,主要用于抓包、口令爆破和Fuzzing测试。本章通过BruteForc靶场实战,深入掌握Burp口令爆破。 经过测试,原靶场(https://github.com/3sNwgeek/BruteForc_test)在登录回显方面存在几处问题,现已修正并…

PTA7~8次大作业总结

目录前言设计与分析PTA第七次作业PTA第八次作业踩坑心得总结 前言第七到八次大作业已经完成,对第七和第八次大作业里所学进行一个总结,从多方面来分析这两次作业之间的联系和差异,并从中了解自己的不足与缺点。第七次作业添加了互斥开关和窗帘,窗帘还好,只是一个简单的电路…

代码随想录算法训练营第23天 | 39.组合总和 40.组合总和Ⅱ 131.分割回文串

39.组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个…