题目集4~6的总结

题目集4~6的总结

一、前言
1.这是第二次写博客了,对一些格式还是有一点了解的。看了一下上次的博客,还是有一些问题的,封面也不太好看,但是自己写的不能嫌弃。还是要夸一下自己还能写博客了。从第四次作业就加上了继承的使用,涵盖面向对象编程中的类与对象、继承、多态概念,以此构建出不同实体相关类并实现其特定逻辑与统一处理方式。运用集合框架下的多种集合类来满足不同的数据组织、查找与遍历需求。通过对字符串的分割、拼接、比较操作实现文本处理;借助异常处理机制的try-catch语句块增强程序健壮性。利用正则表达式基于设定模式提取关键信息。当然也涉及到一些原则,比如单一职责原则,依赖倒置原则。
2.此次作业集在题目数量上与以往大致持平,然而题目难度却显著提升。在第二类作业里,虽引入了生活中的电路知识,但尚未达到完全贴合生活实际的程度。我们深知,越贴近生活的题目往往越复杂,毕竟众多题目虽源于生活,却都经过了简化处理。而此次作业将生活电路纳入其中,乍看之下似乎具备一定逻辑架构,可一旦涉及具体实现,却让人感到迷茫,仿佛置身于迷雾之中,摸不着头脑。在生活电路里,各种电器设备的连接方式、工作状态的相互影响以及不同环境因素的干扰等,都使得问题的复杂程度呈指数级增长。对于我们来说,要想在这样的作业中理清头绪,精准地构建模型并实现相应功能,无疑是一项极具挑战性的任务,需要我们投入更多的时间与精力去深入探究和分析,在知识的海洋里艰难地摸索前行,努力攻克这一难关。不过还好,越是可能困难的题目,确实越应该去挑战它。所以这次题目虽然很难,但是还是要努力克服。毕竟没有困难的事情也是很少的意义,当然不能否认很多事情都是简单开始的。不过困难的事情可以在这个过程中积累一定的经验。而且难的题目可以涉及到更多的知识点,通过一个难的题目其实是对知识点的掌握,并且最后可以在作业的基础上试着使用一些模式。

二、设计与分析
第四次作业

类图:

耦合度


虽然不怎么回看这些图,但是看到一些值比较大,说明代码确实不够好,比如那个最大深度,反正是小比较好,然后这个有一个好像是复杂度是比较大的都已经超过了二十。总而言之,这个代码是可以优化的。当然,这个能写出来就已经花了不少时间,没有想过去优化它。
顺序图:

第四次作业的输入和输出是跟之前差不多的,不过增加了一个选择题和一个填空题,逻辑处理分数上面也有不一样的地方。而这个题目要求使用继承,那么就用题目类作为一个父类,多选题目,填空题目还有普通的题目都把它们作为一个子类。然后多选题目,需要把多选题分情况,选择对了一部分就有那部分的分数而填空题也是一样。对于多选题只要是有字符相同一部分就能得到部分分数,但是对于填空题,不知道怎么处理或这个字,是把这个字之前和这个字之后的字把它变成正确答案还是怎么样。自己在处理时有一些局限性,写的代码会把一个只要是其中的字符就当做有分。显然是有很大的问题的,然后对于多个试卷的处理也没有正确的获得结果。

第五次作业

类图

耦合度


这个图里面的数值都不怎么大,说明还是比较好的代码。但是,这是一个比较简单的代码,数值小也是比较正常的,其实反而相比可能是数值比较大了。这个复杂度也是大了,深度到了一个比较接近于十位数的值。也是超过了五,具体还是要怎么优化就不在这里说明。
顺序图:

这次的作业是比较难的虽然才是新类型的第一个但是由于题目是比较贴近生活的,根据一个越是具体的实际生活题目越难来说,这个题目就是很难的。然后这个用了一些电路设备类,把它先是分为了一个控制设备类和一个受控设备类,然后就是具体的电器设备。还有串联类和并联类分别用来处理不同的电路。当然这次作业并没有使用到并联类,这里先写了,可能后面会删去,也可能会修改,具体还要看后面的需求还有代码的逻辑。因为这次没有电阻这类的,那么直接可以使用电压为一定的电压,处理起来也是比较简单,相比后面的作业也是比较简单的。但是这个作业主要就是处理上要花一定的功夫,也要为后面的可拓展性做铺垫。我这里写的对后面的铺垫还是比较少的,导致后面的作业多花了一些时间。而且还没有按时正确处理完成。还是自己在设计上存在一些问题,比如对类的单一职责没有做好,一些类明显比其他类要多很多。当然,也不能一味的去减少类里面的内容。然后对于电压的处理确实不太好,会导致后面要做更多的工作。总之,如果前面就已经做好了准备,那么后面的题目只要修改一点点就可以了,剩下的只要增加什么功能就加一下类就行。

第六次作业

类图

耦合度

深度还好了,连这个五都没有到,但是这个复杂度好像还是比较大的。
顺序图:

顺序图与之前一样,因为没有改变他的逻辑。
1.这个题目就跟之前的不一样的,这个题目就有电阻了,那么在处理这个题目的时候就要考虑到每个元件的电压是不一样的。处理它们的电压时可以直接根据每个电路的电阻进行分压处理,也可以直接算出某一个地方的电流。这里是用的后者,但是在处理时就有些太片面了。而且由于代码是根据上次的修改,但是上次的代码没有真正的实现,那么这次作业就会比较艰难。加不加落地扇这个是没有什么值得考虑的,关键在于串联与并联的时候每个元件的电压。用自己的话是可以讲通,但是要有代码实现就得考虑更多。
2.虽然说总的就是电压的计算,但是要实践处理就有一定的困难。不过这个题目也是降低了一定难度的,因为在每个串联和并联的前面都有一个表示的字符。那么只要处理到这个字符,那么就把这个当做串联或者并联。如果是要通过程序自己去判断是串联或者是并联,那么可能现在都还是在处理输入信息。

三、踩坑心得

第四次作业

这次作业就是这个填空题这里不能正确处理填空题的答案,要注意的就是应该是答案是有一个或的话,就要正确处理或字前面和后面的都是正确答案。没有正确处理就会错误。然后就是打印的信息要按照顺序打印出来,在处理有多张试卷的时候。还有代码的逻辑上要考虑到乱序输入,然后就是多学生乱序。这些都没有处理好,所以也不知道怎么处理就不多解释了。不过这次的作业中,还是比较顺利的把删除题目的任务给实现了,虽然这次作业的注意还是在多选题目还有填空题目上。有一定的突破总的来说还是比较好的。

第五次作业
1.第一次编译运行然后发现与答案截然相反。

这就很不错了,因为如果与正确答案相反其实就可以算正确答案了,只要修改一下相反的地方就直接就是正确答案了。那么就把这个打开和关闭修改一下,把关闭变成打开。发现果然相反地答案就是正确答案。所以只要发现自己与正确答案相反的话,其实里正确答案只是差那么一步。
2.第五次作业的难度就增加了,一下子错了很多。虽然是正常的因为很多时候没有考虑全面,只是考虑了几个甚至只是考虑了一个最简单的输入输出。

只是没有注意到这个题目在打印结果时,当然那个时候也没有考虑到一定要什么顺序。那么就是答案结果顺序与正确答案不一样,那么就在打印的时候设定了一个优先级,就是开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇这样的顺序。当然具体的是按照它们所对应的字符设定了一个优先级。那么当打印它们状态的时候就会按照这个顺序实现。

第六次作业
1.题目还是比较困难的,对于一些处理还是与前面的一样。那么导致题目其实是有很多问题的,那么提交以后就是很多测试点没有通过。


2.电压的处理上面,没有正确的根据电路的具体结构来计算电压,那么使得看上去使用到了电阻,然后电压用的都是一样的。
3.串联和并联的类是有了,但是在使用上面不是特别的好,在后面的题目里面要继续改进。只有这样,这个题目才能比较好的实现,即使拿不到满分,也要继续尝试更多的突破自己。
4.第六次作业是十分困难的,它让我感觉到自己对知识的掌握程度还远远不够,还需要花更多时间去学习。测试点很多,一个一个的解决难度也很大,所以最后只能完成了一点点测试点,说时间不够也只是自己不够努力。如果能够把所有可以利用的时间来进行设计题目中的需求,那么最后也可以完成代码。在设计类的结构时没有考虑到之后的题目,导致自己在后面的题目时可能需要重新处理。

四、改进建议
第四次作业
改进建议一些。将不同功能的代码模块化,例如将输入处理、数据存储、答案处理等功能分别放在不同的类或方法中,提高代码的可读性和可维护性。异常处理增强。在处理输入和数据时,增加更多的异常处理机制,确保程序在遇到非法输入时能够给出明确的错误提示,并且不会崩溃。
对于大量数据的处理,考虑使用更高效的数据结构和算法,例如使用 HashSet 而不是 List 来存储和查找数据,减少时间复杂度。避免重复代码,例如在多个地方使用相同的正则表达式匹配逻辑,可以提取成一个公共方法。

第五次作业
改进建议包括:优化类和方法的命名以提高代码可读性,其实这个也没有必要了。因为命名如果是英文的自己也不认识那个单词,那么按照英语命名没有意义。提取和重构重复代码以增强代码复用性,确保组件状态的正确同步,特别是在处理开关状态和电压更新时,以及增加异常处理和输入验证来提高代码的健壮性。此外,可以考虑将组件和处理逻辑分离到不同的类或文件中,以提高代码的模块化和可维护性。不过在测试的作业上面来说,一个文件里面省得到作业还要把其他类放到一个文件里面。所以一个文件或者多个文件放类主要还是具体问题具体分析。不过感觉一个文件放不同的类也不会太多,也许是因为代码量不一样。如果代码量很多的话就应该放到不同文件。

第六次作业
对于改进,可以根据优化的那些点改进。将功能相近的代码组织成独立的模块,例如输入处理、电路构建、命令处理和结果输出等,每个模块可以封装成一个类或方法。确保每个类和方法只负责一个功能,避免一个类或方法承担过多职责。
在计算总电阻、电流等参数时,避免重复计算,可以使用缓存或中间变量存储结果。优化循环。在这个作业里面循环比较多,尽量减少嵌套循环的使用,提高代码执行效率。提取公共的逻辑和方法,避免代码重复。例如,renewingVoltage 方法在多个类中都有实现,可以考虑提取到基类中。

五、总结

1.学到的内容。进一步巩固了面向对象编程思想,学会构建复杂的类层次结构来模拟现实世界的对象体系,深入理解了继承、多态、封装在实际项目中的应用价值,例如能清晰地将不同类型的电路组件抽象为具有共性和特性的类层次结构,使代码的扩展性和维护性更好。掌握了多种数据结构在不同场景下的应用,如 ArrayList 在存储动态变化的数据集合(如电路连接中的组件列表)方面的便利性,HashMap 在快速查找特定元素(根据组件标识查找组件对象)时的高效性,能够根据实际需求选择合适的数据结构来组织和处理数据。对电路知识在编程中的模拟有了实践经验,不是完全的理解如何将电路的物理概念和逻辑关系转化为代码中的属性和方法,通过编程实现对电路系统的行为模拟和状态控制,提高了知识的综合运用能力。提升了输入输出处理能力,能够根据特定的输入格式要求,准确地解析输入信息并分类处理,将处理结果以规定的格式输出,增强了与用户交互的程序设计能力。
2.需要进一步学习及研究的地方。在并发编程方面,需要深入学习多线程并发编程的知识,包括如何合理创建线程池、分配任务、处理线程同步与互斥等问题,以便在处理复杂计算或多任务场景时能够充分利用多核处理器资源,提高程序的性能和效率。代码的优化方面还有很大的提升空间,例如在计算总电阻、电流和电压更新等操作中,可能存在一些重复计算或可以进一步简化的算法逻辑,需要学习算法优化的方法和技巧,对代码进行性能优化,以提高程序的运行速度和资源利用率。
3.在代码的架构设计上,可以进一步研究设计模式,学习如何运用合适的设计模式来更好地组织代码结构,使代码的耦合度更低、内聚性更高,例如在处理电路组件的创建和管理过程中,可能可以运用工厂模式或建造者模式来简化代码逻辑,提高代码的可读性和可维护性。同时,进一步探索组合模式在电器设备作业协同方面的应用,通过将电器设备构建成组合结构,使得其作业能够更加精准、高效且有序地完成。

posted @ 2024-11-23 14:39  pyiu  阅读(13)  评论(0编辑  收藏  举报