首页 > 其他分享 >OO题目集4~6总结

OO题目集4~6总结

时间:2024-06-09 16:34:18浏览次数:26  
标签:OO 总结 题目 代码 电路 这道题 输入 设备

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.心得体会

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

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

标签:OO,总结,题目,代码,电路,这道题,输入,设备
From: https://www.cnblogs.com/Yyr114/p/18239680

相关文章

  • springboot+vue在线考试系统附带文章和源代码部署讲解等
    文章目录前言项目运行效果截图技术栈后端springboot框架:后端mybatis框架:前端框架vue:数据库mysql:开发环境代码参考数据库参考源码质量保障源码获取前言......
  • springboot+vue养老院管理系统附带文章和源代码部署讲解等
    文章目录前言项目运行效果截图技术栈后端springboot框架:后端mybatis框架:前端框架vue:数据库mysql:开发环境代码参考数据库参考源码质量保障源码获取前言......
  • springboot+vue医院管理系统附带文章和源代码部署讲解等
    文章目录前言项目运行效果截图技术栈后端springboot框架:后端mybatis框架:前端框架vue:数据库mysql:开发环境代码参考数据库参考源码质量保障源码获取前言......
  • jquery 封装 bootstrap table
    简易代码如下:JS如下:$.fn.extend({table:function(opts){consttableConfig={mode:'debug'}consttablePreset={limit:10,}//TheinstanceconstTable={......
  • 华为od-C卷100分题目-3用连续自然数之和来表达整数
    华为od-C卷100分题目-3用连续自然数之和来表达整数题目描述一个整数可以由连续的自然数之和来表示给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式输入描述一个目标整数T(1<=T<=1000)输出描述该整数的所有表达式和表达式的个数。如果有多种表......
  • SpringBoot3集成Knife4j生成接口文档
    导入依赖<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version></dependency>注意:SpringBoot......
  • 第二次Blog总结
    一、前言经过题目集4至题目集6的学习与实践,我深刻体会到了面向对象编程(OOP)的魅力与挑战。本次总结将重点围绕三次题目集中的7-1题目,从知识点、题量、难度等方面进行分析与总结。知识点题目集4至6中的7-1题目,无一不紧扣面向对象编程(OOP)的核心概念。这些题目不仅深入探索了类的继......
  • spark-3.5.1+Hadoop 3.4.0+Hive4.0 分布式集群 安装配置
    Hadoop安装参考:Hadoop3.4.0+HBase2.5.8+ZooKeeper3.8.4+Hive4.0+Sqoop分布式高可用集群部署安装大数据系列二-CSDN博客一下载:Downloads|ApacheSpark1下载Maven–WelcometoApacheMaven# maven安装及配置教程wgethttps://dlcdn.apache.org/maven/maven-3/......
  • PTA题目集4~6的总结
    前言1.第四次题目集的7-1在答题程序-3的基础上新增了一些内容,输入的内容增加,并且输入的格式有更加灵活,很好的考察了我们对于信息的处理能力、对正则表达式相关知识点的掌握还有使用面向对象方法编程的熟练度。此外,相比于前面三题,这次题目的要求更加***钻和细致,非常考验我们当前对......
  • 第二阶段PTA总结
    前言本阶段面向对象程序设计又进行了三次PTA训练,第一次(总第四次)还是接续上轮训练的试卷判分系统的程序设计,后两次都是新的电路设计训练题目。相对来说,第二次电路设计的第一次练习最为简单,第一次和第三次相对复杂。在这个阶段,我已经适应了PTA训练的题量和训练模式,并且设计起来更加......