oop第7~8次作业总结(第三次Blog)

news/2024/10/4 16:05:33/文章来源:https://www.cnblogs.com/yyh0310/p/18274543

oop第7~8次作业总结(第三次Blog)

一、前言

二、设计与分析

三、踩坑心得

四、改进建议

五、总结

一、前言

1、第七次作业

第六次作业只有一道题,与上次相比,本次迭代考虑多个并联电路串联在一起的情况,考虑一条串联电路中包含其他串联电路的情况。增加了互斥开关和受控窗帘两个设备。互斥开关有三个引脚,2与3 进行选择,默认为2,互斥开关考虑电阻的情况。受控窗帘需要根据整个电路的亮度来进行调整,默认为100%。线路中包含多个串联起来的并联电路。这次迭代需要考虑的情况有很多,需要在上次的基础上再加入新代码。

2、第八次作业

这次迭代新增加了电流,引脚的电压。需要遍历进一步进行赋值。增加管脚电压的显示(在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压)。电流限制(电器在工作时,过大的电流会引起电器过热,从而烧坏电路。本次迭代,每个元器件都有最大电流的设置,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”,与前面的信息之间用英文空格分隔)。短路检测(如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”)。并联电路中包含并联(本次迭代考虑并联电路中包含并联电路的情况,即构成并联电路的串联电路可以包含别的并联电路)。还增加了二极管元件,其电路特性为:正向导通,反向截止;当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。

 

二、设计与分析

1、第七次作业

输入分析:

串联:一条串联电路占一行,串联电路由按从靠电源端到接地端顺序依次输入的 n 个连接 信息组成,连接信息之间用英文空格分隔。

并联:一条并联电路占一行,并联电路由其包含的几条串联电路组成,串联电路标识之间用英文空格分隔。

输出分析:

和前两次的输出都差不多,多了互斥开关和受控窗帘。

思路分析:输入后进入InputMatching进行信息拆分,将设备单独分出来,电路单独分出来;信息拆分完后进入BroseMatching进行各个设备的创建,通过遍历InputMatching里拆分出来的设备信息和调控信息对其进行遍历并创建设备;设备创建完后进入Set进行电路的设置,将串联并联电路上拥有的信息加入Information中,再根据Information中的Connect,依次遍历找到里面的内容并放进去;每个电路都确定了之后,再设置电压,并通过电压来设置受控电器的工作信息。最后是输入,先对设备进行排序,最后输出。

 

类图:

该题是智能家居强电电路模拟系统,Control用来存放控制设备,Switch是开关(可以有多个,其中包括了开关名、是否打开),Continuous是连续调速器(只能有一个,只有档位),Series是分档调速器(只能有一个,只有档位),其中Control是Switch、Continuous、Series的父类;Controlled用来存放受控设备,Lamp是灯(有亮度,Daylight是日光灯,Incandescent是白炽灯,两者都是Lamp的子类),Fan是风扇(有风速,Ceilingfan是吊扇,Floorfan是落地扇,两者都是风扇的子类),其中Controlled是Lamp、Fan的父类;Concatenation是串联电路;ToltalConcatenation是整个电路,Parallel是并联电路,Information是信息类(其中放入电路的名字和电路里的设备信息),InputMatching是是输入类(进行输入信息读取和读取设备信息),BroseMatching是创建类,进行单个设备的创建,set设置电路信息;Main函数进行设计。

设计分析:

可以看出OutPut里的复杂度较高,因为我为了保证各个设备能够按照顺序输出,加入了Conllections的sort方法,每一个设备进行输出,需要多个for循环;其次就是BroseMatching,因为需要创造设备,就需要通过遍历来找到该设备,从而进行创建。

2、第八次作业

输入分析:

与上次的相同,增加了二极管和并联中也能有并联

输出分析:

与之前相比加入了许多东西,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”;如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”,二极管:当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。

思路分析:输入后进入InputMatching进行信息拆分,将设备单独分出来,电路单独分出来;信息拆分完后进入BroseMatching进行各个设备的创建,通过遍历InputMatching里拆分出来的设备信息和调控信息对其进行遍历并创建设备;设备创建完后进入Set进行电路的设置,将串联并联电路上拥有的信息加入Information中,再根据Information中的Connect,依次遍历找到里面的内容并放进去;每个电路都确定了之后,再设置电压,并通过电压来设置受控电器的工作信息。最后是输入,先对设备进行排序,最后输出。

因为这次加入了二极管和引脚,所以对设备设置电势差后,再通过遍历设置各个引脚的电压;二极管也要在存储信息时知道是从2传入还是1传入。

类图:

Control用来存放控制设备,Switch是开关(可以有多个,其中包括了开关名、是否打开),Continuous是连续调速器(只能有一个,只有档位),Series是分档调速器(只能有一个,只有档位),其中Control是Switch、Continuous、Series的父类;Controlled用来存放受控设备,Lamp是灯(有亮度,Daylight是日光灯,Incandescent是白炽灯,两者都是Lamp的子类),Fan是风扇(有风速,Ceilingfan是吊扇,Floorfan是落地扇,两者都是风扇的子类),其中Controlled是Lamp、Fan的父类;Concatenation是串联电路;ToltalConcatenation是整个电路,Parallel是并联电路,Information是信息类(其中放入电路的名字和电路里的设备信息),InputMatching是是输入类(进行输入信息读取和读取设备信息),BroseMatching是创建类,进行单个设备的创建,set设置电路信息,Pins是引脚信息;Main函数进行设计。

设计分析:

可以看出OutPut函数里的复杂度仍然时最高的,因为加入的设备更多,需要遍历的也更多。

 

三、踩坑心得

1、第七次作业

因为前几次作业分析得不是很到位,所以第七次作业重新改进了我的代码,我觉得之前的思路不清晰也让我狠狠踩了坑,这次也需要花大量时间来重新设计思路。其次是互斥开关:

答案错误的问题基本上都是互斥开关的问题,并且互斥开关需要考虑引脚的问题,因为开关是唯一的,但是不同引脚的电压又是不同的,我在写第七次作业时并没有考虑在互斥开关里加入数组电压,而是遍历时每次都会通过互斥开关的信息来分配电压,这个还是会比较麻烦的。还有很多重复的代码,其实做的工作都是一样的,但是我又写了一遍;有些其实只用遍历一次的,但是我遍历了多次增加了复杂度,比如:

其实这里可以直接遍历总电路里的受控设备信息找到受控窗帘。

 

2、第八次作业

第八次作业我觉得有点变态,老师的思路比我的跳跃很多,有时根本就想不到有这个测试点,而且老师给的测试点也少得可怜😢。这次需要改动的东西也比较多,所以有时候思路比较混乱,这次的类更多了,导致自己存了什么东西好多都忘记了😓。还有数组越界,非零返回这些常规的问题,有一个非零返回主要是因为遍历控制设备时,会不小心把i变成负数,导致数组找不到数,比如:

四、改进建议

  • 在做题前需要边读题边思考,有一个清晰明确的思路后再开始编写,不然写了一大半发现思路错误后,只能推翻重写了,不仅浪费时间,还影响了自己的思路。
  • 做题时不能主观臆断,要看清楚题目中所给出的正确信息,不能盲目猜想。
  • 进行后续迭代时可以转换一下自己的思路,思考一下应该怎样写更加便捷并且不会把自己绕晕,过于冗长繁琐,写代码之前也应该斟酌一下,避免出现后面写了一大堆代码后发现想要修改很多地方的情况。上一部分不太清晰的地方即使改正,不然后续的迭代只会越来越错。
  • 自己的时间要合理安排,应该是每科平衡,而不是目前哪科更急就只看哪科,在合适的时间做合适的事情。
  • 下一次迭代可以在上一次的基础上重新编写一下串并联之间的关系,以及电压的设置,仔细思考更简单的方法,遵守单一职责原则,提高类的可读性,可维护性。
  • 对数组的遍历最好不要盲目地对i进行变换,要思考一下,会不会出现数组越界的情况,不然会出现非零返回。
  • 代码能简洁就简洁,不要出现重复的情况,这样增加复杂度,同时也会让自己比较疑惑。

五、总结

这两次PTA作业对我来说还是有点难度的,老师的测试样例真的好少😭,自己的思维也没有打开。在这两次作业中,我学会了转变自己的思维,当被一个难点困住时,我应该改变原来的想法,看看别的思路会不会更好做一点。还有每一步都要与这道题息息相关,通过遍历,一步一步地找到里面含有的信息,这样脑子就不会很晕。代码的注释也是一个好的习惯,有了注释调试的时候会更加方便。JAVA的知识掌握得不是很好,希望自己能在暑假多加练习。

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

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

相关文章

Profinet IO从站数据 转EtherCAT项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 使用PRONETA软件获取PROFINET IO从站的配置信息 2 5 设置网关采集PROFINETIO从站设备数据 5 6 启动ETHERCAT从站转发采集的数据 8 7 选择槽号和数据地址 9 8 选择子槽号 11 9 案例总结 12 1 案例说明设置网关采集Profi…

题目集7~8总结性blog

前言在我看来,题目集7~8知识点在于类的使用,方法的调用,通过不同类的ArrayList的使用将所有元件信息录入,通过连接方式将其变成一条电路,从而进行计算和使用,题量不大,只有一道题,在精不在多,难度适中,可以接受并且能够编程写出,完成功能的实现。设计与分析题目集七…

【日记】现在的孩子真是不怕大人呢(1975 字)

正文时间太晚了,而且想写的内容有点多,就不写在日记本上了。不过说内容多,其实也只有两件事情。其他的就一笔带过吧。一件关于灵,另一件事关于遇见的孩子。首先说说工作,今天真的如昨天预料的那样,特别忙。开一个户,上午就没了。倒不是因为有多难,也不是因为只有我一个…

OOP7-8次作业

OOP7-8次作业 一.前言: 1.第七次PTA: 根据之前的内容在,之前的内容上进行修改和扩增。 ①题目理解: 1.增加了互斥开关,互斥开关的难点在于他可以转换每条路的通路和断路,而且你切换的两个引脚他的电阻也是不一样的,这就增加了你获得电路电阻的难度。 2.对于在电路的获得…

修复Win10上ListView样式不正确的问题

在Windows 11下,使用WinUI2.6以上版本的ListView长这样:然而到了Win10上,尽管其他控件的样式没有改变,但ListViewItem变成了默认样式(初代Fluent) 最重大的问题是,Win10上的HorizontalAlignment未被设置成Stretch,可能造成严重的UI错位(隔壁livelyweather也有这个问题…

Asp.Net Core 使用IBrowserFile完成图片上传

Asp.Net Core 使用IBrowserFile完成图片上传 写在开头 前几天弄自己的项目时遇到的问题,发现了asp.net core 新增的IBrowserFile接口,事实上他可以满足大多数文件的上传,此处我仅以图片作为示例。 实现 添加一个帮助类FileHelper,遵循一种规范,即将静态文件资源存放至wwwro…

Transformer 能代替图神经网络吗?

当Transformer模型发布时,它彻底革新了机器翻译领域。虽然最初是为特定任务设计的,但这种革命性的架构显示出它可以轻松适应不同的任务。随后成为了Transformer一个标准,甚至用于它最初设计之外的数据(如图像和其他序列数据)。 然后人们也开始优化和寻找替代方案,主要是为…

从零开始的 DP 学习记录

为了补上我dp的短板(其实说真的dp约等于没学过,板都没有的那种),也为了以后复习dp不会再忘记dp怎么写,dp的各种思想是怎么来的,从零开始学习 dp ,并记录在此博客。 因为要补的东西也挺多的,就不多开文章了,直接在这里记录了。 当然也会记录日常生活 大概是首发于洛谷博…

【Linux系列】 Bash 重定向中 file 21 和 21 file 的区别

一、 写在前面 在 Bash 脚本和命令行操作中,输出重定向是一项基本且强大的功能。 它允许用户控制命令的输出流,将数据从一个地方转移到另一个地方,实现更加灵活和高效的工作流程。 本文旨在记录 Bash 中几种常见的输出重定向方法,包括:> file>file 2>&1 vs 2&…

c#实现定时从外部服务器获取文件并查重(MD5)

需求:需要定时去请求外部服务器的文件,看看每天是否有新的文件上传,如果有就下载到本地服务器,并记录数据。原来的文件重命名。 方案:这里通过文件的MD5和其他条件来判断文件是否存在。因为文件量过大,所以批量下载的时候有时候会出现部分文件没能下载成功,但是数据入库…

Qt开发笔记:Qt3D三维开发笔记(一):Qt3D三维开发基础概念介绍

前言Qt3D是qt的三维,Q3D是Qt的三维图表,Qt3D是qt的自带的三维开发框架,Qt的3D开发分为opengl、Qt3D然后是第三方三维框架(OSG、vtk等等)多个技术流。  本篇描述Qt3D的基础概念,有一个基本知识。 个人经验,仅供参考(持续更新)通过深入研究和实践,从中长期看采取第三方…

VuePress日常使用

本篇来讲解下更多关于 VuePress 的基本用法本篇来讲解下更多关于 VuePress 的基本用法 ‍ 配置首页 现在的页面太简单了,我们可以对项目首页进行配置,修改 docs/README.md (这些配置是什么后面会说): --- home: true heroImage: https://s3.bmp.ovh/imgs/2022/12/02/bc742…