OO题目集4~6总结

news/2025/1/19 7:55:07/文章来源:https://www.cnblogs.com/Yyr114/p/18239680

OO题目集4~6总结

​ 在之后的几次题目集的7-1题目中,难度渐渐高了起来,第四次题目集主要是在第三次题目集的基础上添加了一些功能,而之后的两次则是设计一个新的程序,是关于电路设备及电路的,与之前的答题程序不同,新的题目对于创新和思考能力以及思维逻辑能力要求更高,而接下来我将对这几次题目集进行具体分析。

四次题目集实现

题目集4

​ 题目集4在题目集3的基础上增加了题目类型,不再是原来简单的题目和单一的答案了,而是有单选题、多选题和填空题三种类型,我认为这次的题目集的难度主要在于在原有的类上进行修改,以及对不同类型的题目进行分类和判断,而在写这道题时,我也很快有了思路,因为那个时间点老师刚好讲了Java中的继承与多态,Java中的继承是面向对象编程的一个核心概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承的主要目的是实现代码复用,使得子类能够吸收父类的特性,并在此基础上扩展新的功能。而在这道题中我们就可以用继承的方法,将原来的题目(Question)类设计为父类,在此基础上设计多选题类和单选题类还有填空题类,通过对输入信息中的题目信息进行判断,并将其进行分类,储存到不同类中,通过使用继承关系,可以使得代码更加模块化、可重用,并且能够清晰地表示对象之间的关系,因此能够有效减少代码量,是代码更加简洁明了。

​ 一开始我便是朝着上文的方向进行设计的,我给Question类设计了3个子类:单选题类和多选题类还有填空题类,一开始我是想在主函数在添加三个列表分别储存三种题目,但是写着写着我便发现这样子写十分的繁琐,我添加了大量if和for循环,之后把自己绕晕了,且这样写的话对题目的排序也很麻烦,而且很多我之前题目集写的代码都要大改,在写了半天结果输出还是不尽人意后,我放弃了这种想法,我觉得我的想法没有问题,但可能我水平不够,无法完美实现这些,于是思考再三,我设计了一个Allquestion类,这个类作为父类,有所有题目共同的属性和构造方法以及功能,在这个基础上,我又设计了子类Question类,用来判断三种题目类型,并对它们进行分类,而对三种题目进行分类的方法就是判断它的题目以及答案格式,如果题目中有字母选项则是选择题,再对答案进行判断,如果答案是单个字母则是单选,是多个则是多选,其他情况那就是填空题,给三种题目类型进行标记,在批改题目时进行遍历,判断是哪种题目类型。对于多选题,我将他的答案属性设为了List类型,在判断答题是否正确时读取答案进行遍历,分三种情况:1.完全正确(true)2.部分正确(partially correct)3.错误(false),写这个功能是比较繁琐的,因为要考虑多种情况,而我只会简单的if和for循环,所以总是有些情况没考虑到,如果让我单独写判断得分的函数我可以很快写出来,但是我要将它们完美插入我之前写的代码中就很难了,在写这串代码时我改了不下几十次,才在不出现错误的情况下实现了这个功能,在写这道题时我也考虑到我这样写的弊端,因为这样写的话,万一题目和答案里就是有字母但它们就不是选择题,我就没办法了,虽然我考虑到了,但是时间已经不太够了,况且我已经过了大部分测试点,所以我想着在下次大作业中优化这些代码,不过下一次大作业换成了家居强电电路模拟程序,所以我的打算也就不了了之了。

题目集5

​ 从第五次题目集开始就是家居强电电路模拟程序了,刚开始看到这道题时,我的第一感觉就是题目有点看不太懂,主要时电路这种东西用代码来实现有点抽象,花了一段时间理解题目后,我的想法有很多,但是对于如何实现还是很懵,我一开始的想法是写一个父类device作为总的电路设备,device之后再设计两个子类分别为受控设备和控制设备,然后再个这两个类设计子类。这道题的类设计不难,主要难在主函数的设计,我想了很久还是想不出一个好的方法来把电路信息进行输出,光是获取输入信息我就写了很长的代码了,不过最终我还是想到了一个较为简单的处理方法,那就是写两个列表,一个储存受控设备,一个储存控制设备,然后再获取输入信息中对设备的调控,通过遍历和循环先将每个设备的工作状态弄好,之后再按照顺序输出结果,由于这道题只考虑了串联的情况,所以根据前面的思路就可以完成这道题,以下是我觉得这道题的难度及需要注意的地方:

难点:
  1. 状态管理:需要跟踪每个设备的状态(如开关的打开/关闭,调速器的档位,灯的亮度,风扇的转速),并在每次操作后更新这些状态。
  2. 电压计算:必须正确计算电压在串联设备中的传递和分配,尤其是在调速器调整电压时。
  3. 设备间交互:设备之间的交互逻辑较为复杂,需要根据不同的设备类型和状态进行不同的电压处理。
  4. 数据截尾规则:在计算过程中,需要使用截尾规则来处理小数结果,但在计算过程中不能将浮点数转换为整数,以避免精度损失。
  5. 输入解析:需要解析输入信息,并据此建立设备之间的连接关系。
需要注意的地方:
  1. 设备初始化:所有设备的初始状态或档位都应该是0,除非输入信息中有明确的调整指令。
  2. 连接顺序:输入信息中的连接顺序代表了电路的连接顺序,必须严格按照这个顺序来模拟电压的传递。
  3. 设备类型区分:在输出设备状态时,需要根据设备类型输出不同的参数(如开关状态、灯的亮度、风扇的转速等)。
  4. 输出格式:输出格式需要严格按照题目要求,包括设备标识、编号和参数值。
  5. 输入结束标志:输入信息以"end"为结束标志,需要正确处理结束后的输入。
  6. 异常处理:题目中提到不考虑输入电压或电压差超过220V的情况,因此在设计时可以假设这一条件始终满足,而不需要额外的异常处理。
  7. 简化假设:题目中简化了电路模型,例如不考虑并联、反馈接入等情况,这些假设需要在设计时予以考虑。
  8. 数据类型选择:为了保持精度,涉及计算的变量应使用double类型,并在最终输出前进行截尾处理。在设计模拟系统时,要确保代码逻辑清晰,能够根据输入信息动态调整设备状态,并正确输出每个设备的工作参数。

题目集6

​ 题目集6与题目集5相比增加了并联的情况,同时也改了输入输出样例,且只给出了前三个测试点,无疑是加大了难度,这次作业要修改的地方很多尤其是输入的获取,现在是一条电路信息为一行,我本来想直接通过正则表达式来获取利用一整行的信息,结果写着写着发现不太可行,因为一行代表一条电路,而电路中的设备可以是无限个的,而以我目前对正则表达式的理解,实在想不到可以直接获取一整行信息的方法,于是我换了个思路,通过分隔符将一行的信息分开,再通过正则表达式读取,本来这种方法是不太可行的,因为输入的情况是前期百怪的,如果我这样写,有很多错误输入的情况我判断不了,不过这题并没有考虑错误输入的情况,所以可以这样写,这也算是给这道题降低了难度,不过估计后续题目集这种方法就不行了。

​ 这道题还有一个很让我头疼的点是最后的输出要按照编号顺序来输出每个电路设备的工作状况,本来想着直接用if列出六种情况来进行排序输出,但这样太麻烦了,代码还多,于是我想了一个比较简洁的解决方法,那就是写一个内部静态类 CustomComparator,来实现Comparator接口,用于定义字符串对象间的比较逻辑。这样写不仅方便简洁还便于以后的修改。以下是我觉得这道题的难度及需要注意的地方:

难点:

  1. 多态和继承的使用:需要定义多个类,并且使用继承和多态来处理不同类型的电路设备。正确地设计基类和派生类,以及处理它们之间的关系是一个挑战。
  2. 状态管理:每个设备都有可能处于不同的状态(例如,开关的开/关状态,调速器的档位),这些状态需要根据输入信息进行更新。
  3. 电路连接的解析:解析输入的连接信息,并正确地构建电路的连接关系,需要仔细处理字符串和数组操作。
  4. 电路模拟计算:根据连接关系和设备特性进行电压、电流和功率的计算。这需要理解基本的电路理论,包括串联和并联电路的计算规则。
  5. 输入和输出的格式化:输入输出格式要求严格,需要按照规定的格式解析输入和生成输出。
需要注意的地方:
  1. 初始状态:所有设备初始状态为0,需要确保在开始任何计算之前,设备的状态被正确地初始化。
  2. 精度处理:根据题目要求,计算过程中出现的小数需要保留,直到最后输出时才进行截尾处理。
  3. 输入信息的顺序:输入信息需要按照特定的顺序处理,例如,并联信息中的串联电路必须在并联信息之前输入。
  4. 设备编号的唯一性:虽然不同设备的编号可以相同,但同种设备的编号需要唯一,且按编号顺序输出。
  5. 电路结构的限制:题目中提到了一些电路结构的限制,如调速器只能直连VCC,不包含在并联单路中,这些限制需要在代码中体现。
  6. 异常情况处理:题目说明不考虑电压超标的异常情况,但在实际应用中可能需要处理这类情况。
  7. 代码的可维护性和扩展性:随着迭代的发展,电路模拟程序可能会增加新的功能和组件,因此代码结构需要设计得易于维护和扩展。

在处理这道题目时,理解电路原理和编程逻辑是关键。同时,对输入输出的精确控制和对题目要求的严格遵守也是必不可少的。

总结作业

1.分析和总结

​ 参考第一部分的内容。

2.设计检查

​ 题目集4

分析:题目集四主要需要用到继承的方法,再批改答卷时较为繁琐,代码量中等。

题目集5


题目集5还算简单,主要是处理电路信息的方法有点难想到,通过运用继承多态及抽象类可以很好实现。整体复杂度较低,代码量中等。

题目集6



题目集6相比题目集5复杂许多,在处理并联和串联电路时较为困难,整体复杂度较高,代码量较高。

3.心得体会

​ 在这三次作业中我主要学习到了如何运用继承和多态来写代码,并开始将所有方法都用函数来实现,这使得我的代码量有效减少了,思路也更加清晰了。

​ 但是,我还有许多地方有待进步,比如测试环节。设计模式也需要抓紧时间学习。

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

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

相关文章

南昌航空大学软件学院-23201930-刘靖辉-第二次blog作业

1. 前言 2. 设计与分析2.1 OOP-4:答题判题程序12.1.1 题目2.1.2 源码2.1.3 评价与分析2.1.4 踩坑心得2.1.5 改进建议2.2 OOP-5:答题判题程序22.2.1 题目2.2.2 源码2.2.3 评价与分析2.2.4 踩坑心得2.2.5 改进建议2.3 OOP-6:答题判题程序32.3.1 题目2.3.2 源码2.3.3 评价与分析…

跟思兼学Klipper(30):使用辅助宏调整3D打印机无感归位堵转检测阈值

又名《调整堵转检测阈值降低创想三维 K1C 打印机无感归位啪啪声》 前言 原创文章,转载引用务必著名链接,水平有限,如有疏漏,欢迎指正交流。 文章如有更新请访问 DFRobot 社区及 cnblogs 博客园,前者内容较全,后者排版及阅读体验更佳。 手中的创想三维 K1C 3D 打印机目前使…

分组排名

问题:按A列数据分组降序排名函数公式解决:=MATCH(C2,SORT(FILTER(C$2:C$20,A$2:A$20=A2),,-1),)Filter部分提取相同配货仓的销售金额 Sort部分将同组内销售金额降序排序 Match部分查找每个值在降序排序后数据中的位置,相当于获取排名

“交叉引用”的条件格式

问题:设置条件格式,高显指定姓名和指定姓名与月份的数据条件格式解决:使用公式:=($D2=$A$2)*(D$2=$B$2)+(D$2=$B$2)*(ROW(D2)=2)($D2=$A$2)*(D$2=$B$2):高显指定月份和姓名的数据 (D$2=$B$2)*(ROW(D2)=2):高显指定姓名第一行的数据

kali2022安装教程(附安装包)

第一步:下载镜像文件 百度网盘下载[链接:https://pan.baidu.com/s/1efRQGFTbq6Kgw9axLOmWzg?pwd=emxf () 第二步:打开Vmware创建新的虚拟机,选择高级,然后下一步直接默认下一步选择稍后安装然后下一步kali属于Debian系统所以这里直接选择Debian6 64位进行命名和选择安装位…

BUUCTF-WEB(71-75)

[watevrCTF-2019]Cookie Store 打开购买flag那个cookie抓包,有个session值得注意我们拿去cyberchef解密一下然后我们试试改一下 {"money": 200, "history": []} eyJtb25leSI6IDIwMCwgImhpc3RvcnkiOiBbXX0=然后发送响应包返回了一个session,我们解密一下就…

vue 发起get请求和post请求

一、vite方式初始化vue3项目C:\Users\Administrator>npm init vite-app his-project> npx > create-vite-app his-projectScaffolding project in C:\Users\Administrator\his-project...Done. Now run:cd his-projectnpm install (or `yarn`)npm run dev (or `yarn d…

Ventoy使用教程

Ventoy使用教程, 制作自己的启动U盘Ventoy是一款开源的USB启动盘制作工具,它允许用户将多种类型的操作系统镜像文件(如ISO、WIM、IMG等)直接拷贝到U盘,而无需反复格式化U盘。本教程将详细介绍Ventoy的使用步骤,帮助用户轻松制作USB启动盘。 一、准备工作下载Ventoy:访问V…

python-数据分析-Numpy-3、数组的运算

数组的运算 使用 NumPy 最为方便的是当需要对数组元素进行运算时,不用编写循环代码遍历每个元素,所有的运算都会自动的矢量化。简单的说就是,NumPy 中的数学运算和数学函数会自动作用于数组中的每个成员。 # -*- coding: utf-8 -*- #数组的运算 #使用 NumPy 最为方便的是当需…