第三次大作业Blog

目录
  • 前言
  • 设计与分析
  • 踩坑心得
  • 改进建议
  • 总结

前言

知识点:

  • 类与对象的应用:
    在三次大作业中,类与对象的应用无疑是核心和基础。这充分体现了Java作为一种面向对象编程语言的特性。通过定义类,我们可以创建具有特定属性和行为的对象,从而构建出复杂的程序逻辑。在每次大作业中,我们都需要根据题目要求定义不同的类,如学生类、课程类、电器类等,并为这些类创建对象以进行实际操作。对象的创建、属性的设置和方法的调用是我们在大作业中最常进行的基本操作,它们共同构成了程序运行的基石。

  • 字符串与数组的应用:
    在第四次大作业中,字符串与数组的应用显得尤为重要。字符数组作为存储char类型数据的基本结构,在处理输入信息时发挥了关键作用。我们可以利用字符数组来存储用户的输入,然后通过访问、声明和初始化等操作对信息进行提取和处理。此外,字符串之间的对比和转换操作也是处理输入信息时必不可少的步骤。这些操作帮助我们筛选出需要的信息,为后续的正则表达式匹配和数据处理提供了基础。

  • 正则表达式的应用:
    在处理输入信息时,正则表达式提供了一种高效且系统的方法。它能够精确地匹配特定字符和截取特定字符串,使得信息处理的过程更加便捷和准确。通过将正则表达式与字符串转换相结合,我们可以轻松地对输入信息进行格式化和提取,从而满足大作业中的特定需求。正则表达式的应用不仅提高了代码的可读性和可维护性,还大大提高了程序运行的效率。

  • ArrayList的使用:
    在新的系列大作业中,我开始使用ArrayList来替代传统的数组进行数据存储和调用。这一改变带来了诸多好处。首先,ArrayList具有动态调整大小的能力,可以根据需要自动扩展或缩小容量,从而避免了数组越界的问题。其次,ArrayList提供了丰富的API供我们调用,使得数据的添加、删除和查找等操作变得更加便捷和高效。最后,ArrayList的使用使得代码更加灵活和可扩展,能够适应更多的场景和需求。

  • 抽象与继承的应用:
    在对数据类进行定义时,抽象与继承的应用使得代码结构更加清晰和易于维护。通过定义抽象类,我们可以提取出不同子类之间的共同属性和方法,从而减少了代码的冗余和重复。同时,继承机制使得子类能够继承父类的属性和方法,并在此基础上进行扩展和重写。这使得我们在对各个对象进行统一操作时,只需要使用父类对象即可,提高了代码的复用性和可维护性。此外,抽象与继承的应用还有助于我们更好地组织和管理代码,使得程序结构更加合理和易于理解。

  • 接口的使用:在最近一次的大作业中,我巧妙地运用了接口技术,不仅实现了深层次并联的精准判定,还实现了信息的流畅录入和电器的有效处理工作。这一创新性的应用策略极大地减少了代码中的重复性内容,使得整个代码库更加精简、高效,并且显著提升了系统的整体性能和可维护性。同时,这也极大地缩减了代码的总体量,让我们的开发工作更加高效、有序。

题量:

  • 这两次大作业的题量相较于前三次显著增加,涉及的内容更为复杂,对代码设计的要求也更为严格。在应对这些挑战时,我深感自己代码设计上的不足,特别是在处理复杂逻辑和数据结构时显得捉襟见肘。为了改进这一情况,在第八次大作业时,我对代码结构进行了彻底的修改,全面引入了接口的概念,以更加灵活和可扩展的方式实现代码逻辑。这一举措不仅提高了代码的可读性和可维护性,还有效地减少了代码的冗余和复杂性,使我能够更好地应对大作业中不断增加的题量和复杂度。

难度:

  • 第七次大作业有两个区块没过,并不清楚自己还没考虑到的点在哪仅拿了76分,较难。
    第八次大作业就更让我大脑爆炸了,仅有26分,整个人都懵掉。

设计与分析

  • 第七次大作业

在这次大作业中,面对增加的互斥开关这一复杂性,我遇到了巨大的挑战。由于我的代码长期偏向于面向过程,main 函数中充斥着大量的重复代码,且缺乏将电器操作抽象成方法并使用递归进行深层次并联处理的能力,这导致我的代码量激增,达到了2000行,这显然是不正常的现象。

为了优化这个问题,我意识到需要对底层逻辑进行彻底的修改。首先,我会将电器的各个操作抽象成独立的方法,每个方法将负责执行特定的操作,如打开、关闭、读取电阻值等。这样不仅可以减少main函数中的重复代码,还能提高代码的可读性和可维护性。

接下来,我会利用递归的思想来处理深层次并联的逻辑。通过递归调用电器操作的方法,我可以更灵活地组合不同的电器和操作,从而实现对复杂电路的精确控制。

针对互斥开关的判定,我将进一步完善引脚编号的判定逻辑。通过对引脚编号的识别,我可以确定互斥开关在电路中的位置和状态,进而判断其对所在线路的通路作用和电阻信息。同时,我会增加lj、state2和state3这三个特征值来更精确地描述互斥开关的状态和连接情况。lj用于判断互斥开关连接到线路上的引脚,而state2和state3则用于判断开关指向哪一个引脚。

此外,我还会优化字符串匹配处理的部分。通过合理的字符串处理和匹配算法,我可以减少不必要的计算和比较,提高代码的执行效率。

最后,我会对整个代码结构进行重构和优化,使其更加清晰、简洁和易于维护。我相信通过这些努力,我可以解决当前代码中的问题,并为未来的开发工作打下坚实的基础。

  • 第八次大作业

在第八次大作业中,我投入了一整天的时间对底层逻辑进行重写和重构。通过精心设计和规划,我成功地将大量逻辑过程抽象为接口,使代码结构更加清晰,代码量也从原先的2000行减少到了1800行(尽管1800行对于某些项目来说可能仍然较多,但这是一个积极的进步)。这次重构不仅让我对面向对象编程有了更深入的理解,也让我在实践中向这个方向迈进了一步。

电极管作为Machine的子类
在这次作业中,我将电极管定义为Machine的一个子类,这是一个合理的决策。通过引入state特征值来表示电极管的正反接状态,我能够更准确地描述其状态变化,并为其display方法提供必要的信息。这种设计使得电极管的行为更加符合其物理特性,也提高了代码的可读性和可维护性。

添加I特征值处理电流
在Machine父类中添加I特征值来代表流过Machine对象的电流,是我为了解决电流超出情况而采取的一个策略。这一改变使得我能够在不修改子类代码的情况下,对所有的机器对象进行统一的电流管理。这种设计体现了面向对象编程中“多态”的思想,使得代码更加灵活和可扩展。

递归处理并联电路
在处理并联电路时,我采用了递归的方法。递归在处理具有相同结构或相似模式的问题时非常有效,它能够使代码更加简洁和易于理解。然而,正如我所提到的,递归在处理多互斥开关的情况时仍然存在一些问题。这是因为递归通常假设子问题之间是相互独立的,而多互斥开关的情况则可能导致子问题之间存在复杂的依赖关系。

为了解决这一问题,我计划在未来对代码进行进一步优化。可能的优化方案包括:

引入状态机:通过引入状态机来管理开关的状态变化,可以更加精确地控制开关的互斥关系,从而避免递归带来的问题。
使用图论算法:将电路视为一个图,利用图论中的算法来处理开关之间的依赖关系。这种方法可能需要更多的前期工作和编程技巧,但能够更加灵活地处理各种复杂的电路情况。
重构代码结构:如果可能的话,我会尝试重新设计代码结构,以更好地处理多互斥开关的情况。这可能需要一些时间和努力,但从长远来看,这将使代码更加健壮和易于维护。
总之,第八次大作业让我深刻体会到了面向对象编程的魅力和挑战。通过不断地学习和实践,我相信我能够逐步克服这些挑战,并编写出更加高效、健壮和可维护的代码

踩坑心得

  • 第七次大作业

在这次大作业中,我最初几次修改代码时忽略了互斥开关的正接和反接问题,这导致了我多次遇到非零返回的错误,并且长时间未能定位到问题的根源。直到使用室友构建的测试用例后,我才意识到这个问题。

此外,我也未能对串联电路中可能存在的再次串联情况进行判断和处理,正如我给出的例子所示,电路T1、T2和T3之间形成了复杂的串联结构,这在之前的代码中没有被充分考虑到。

针对以上问题,我对代码进行了以下优化和丰富:

处理互斥开关的正接和反接:

我对代码中处理开关的部分进行了重新设计,增加了对开关正接和反接的判断逻辑。
通过引入标志位或使用枚举类型来表示开关的不同状态,我可以更清晰地表示并处理互斥开关的正反接情况。
我还增加了相应的测试用例,以确保在各种情况下都能得到正确的结果。
处理串联电路中的再次串联:

我对电路结构进行了更深入的分析,识别并处理了可能的串联电路嵌套情况。
通过递归或迭代的方式,我可以遍历整个电路结构,并正确地处理其中的串联和并联关系。
我还增加了对复杂电路结构的测试用例,以确保代码能够正确处理各种情况。
其他优化和丰富:

在修改代码的过程中,我还对代码的可读性和可维护性进行了改进,通过添加注释、优化变量命名等方式提高了代码的质量。
我还对代码进行了性能优化,减少了不必要的计算和内存占用,提高了程序的运行效率。

  • 第八次大作业

在这次大作业中,我遭遇了一个关键的挑战,特别是在处理互斥开关在并联电路中的应用时。由于我在两个引脚链接的电路中分别添加了互斥开关对象,而后续的输出逻辑中又引入了电位差设定,这导致了一个严重的问题:互斥开关的属性没有得到统一处理。系统始终优先输出先匹配到的互斥开关的属性,而忽视了与之相同的另一个互斥开关对象的属性,这直接影响了最终结果的准确性。

此外,我在设计电路时疏忽了一个重要的细节,那就是没有全面考虑其他电器(除了二极管和互斥开关)的正反接状态。这一疏忽导致我在多个关键得分点上失分,最终成绩不尽如人意,只有27分。其实,要解决这个问题,我只需要在电器类中添加一个特征值来标识其正反接状态,这样就能在计算电路行为时考虑到所有电器的实际情况,从而提升整体的准确性。

通过这次大作业的反思,我深刻认识到在编程和工程实践中,细节决定成败。在未来的学习和项目中,我将更加注重细节的处理,确保每一个组件和逻辑都得到妥善的考虑和测试,以提高最终成果的质量和准确性。

改进建议

在第八次大作业中,我尝试将所有处理过程的代码都整合到了接口中,并运用了递归算法来进行数据的操作。然而,由于这是第八次才进行的改动,并且我没有进行充分的测试,因此我不能完全确定代码中是否存在逻辑错误。为了确保代码的稳定性和正确性,我意识到第八次大作业的代码有待进一步地深入测试和验证。

针对这次经验,我计划在未来的工作中更加注重代码的测试环节,特别是在引入新的设计或算法后,以确保代码的质量和性能。同时,我也会继续优化和丰富我的代码实现,使其更加健壮、易于理解和维护

总结

在最近两次的大作业中,我深刻认识到了自己JAVA编程水平的不足,尤其是在底层逻辑设计和代码组织方面。我遭遇了许多逻辑错误,并且代码结构显得相当繁杂,这直接影响了作业的质量和效率。这些问题凸显出我在JAVA语言运用上的诸多短板,尤其是在使用诸如HashMap等高级数据结构和其他存储信息类方面,我明显缺乏实践经验。

我意识到,作为一名JAVA开发者,仅仅掌握基础语法是远远不够的。我还需要更加深入地学习和理解JAVA的内置类和库,这些工具和方法能够大大提高编程的效率和代码的质量。比如,HashMap就是一个非常强大的工具,它允许我通过键值对的形式高效地存储和检索数据。然而,由于我之前没有很好地掌握它,我错过了许多简化代码和提高性能的机会。

此外,我也认识到自己在设计代码结构时缺乏前瞻性和全局观。这导致我的代码在后期维护和扩展时遇到了很大的困难。因此,我计划在未来的学习中,更加注重代码结构的设计和优化,尽量做到模块化、解耦和可重用。

路漫漫其修远兮,我深知自己在JAVA编程的道路上还有很长的路要走。但是,我相信只要我持续努力,不断学习新的知识和技能,我一定能够不断提高自己的编程水平,成为一名优秀的JAVA开发者。

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

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

相关文章

前端调用后端产生跨域问题解决

[参考文章](https://www.cnblogs.com/zhaodalei/p/17090119.html) ## 问题复现 * 前端的地址是* 后端的的请求资源地址 http://127.0.0.1:3000/api/category/list。 * 当前端请求获取后端数据时,会报如下错误,导致资源加载不出来。但是直接访问是可以获得数据的。说明不是数据…

java第三次大作业blog

pta第三次博客 目录 • pta第三次博客 o 1.前言 o 2.设计与分析 o 3.踩坑心得: o 4.改进建议 o 5.总结1.前言 这两次题目集的主要考察的知识点是继承和多态,包括对super、extend关键字的使用,方法的重写,类的继承,接口,排序,正则表达式等。 在数据处理方面,作业同样要求…

Python基础之多进程

目录1 多进程1.1 简介1.2 Linux下多进程1.3 multiprocessing1.4 Pool1.5 进程间通信1.6 分布式进程 1 多进程 1.1 简介 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识。 Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用…

[LeetCode] 169. Majority Element

排序,返回中值。class Solution:def majorityElement(self, nums: List[int]) -> int:#always existsnums.sort()return nums[len(nums)//2]

BUUCTF---childRSA(费马引理)

题目点击查看代码 from random import choice from Crypto.Util.number import isPrime, sieve_base as primes from flag import flagdef getPrime(bits):while True:n = 2while n.bit_length() < bits:n *= choice(primes)if isPrime(n + 1):return n + 1e = 0x10001 m = …

Python 使用__slots__来限制实例动态添加属性

在Python中,是可以随便在对象实例中动态添加属性的。那么,怎么样可以防止其他人在调用类实例的时候胡乱添加属性和方法?使用 __slots__ 属性,来限制 class 实例能添加的属性也就是说,只有在 __slots__ 变量中的属性才能被动态添加,否则会添加失败。例如,创建一个 Person …

[python] Python日志记录库loguru使用指北

Loguru是一个功能强大且易于使用的开源Python日志记录库。它建立在Python标准库中的logging模块之上,并提供了更加简洁直观、功能丰富的接口。Logging模块的使用见:Python日志记录库logging总结。Loguru官方仓库见:loguru,loguru官方文档见: loguru-doc。 Loguru的主要特点…

Codeforces Round 955 (Div. 2, with prizes from NEAR!) codeforces div2 955

A. Soccer ------------------------题解--------------- 给你开始比分和结束比分问你中间两队比分有没有相等过有可能就是YES不可能就是NO 结束时两队比分肯定>=各自队伍开始时比分,我们只需要让开始时大的先到达结束比分,再让开始时落后的比分到达结束时比分,只需要在心…

PTA题目集7~8的总结

PTA题目集7~8的总结 一、前言 第七次题目集为家居强电电路模拟程序3。本题模拟的控制设备包括:开关、互斥开关、分档调速器、连续调速器。模拟的受控设备包括:灯、风扇、受控窗帘。两种设备都有两根引脚,通过两根引脚电压的电压差驱动设备工作。输入信息有设备信息、连接信息…

STM32F4驱动USB实现虚拟串口

实现目的 使用Dap-link和stlink的时候,就发现这些仿真器上并没有USB转TTL芯片,就可以实现USB转串口,实现虚拟串口,非常方便。这里实测得出,使用USB虚拟串口,可以轻松达到921600波特率,接近1M/s,因为这个虚拟串口实际就是USB通讯,使用USB通讯,模拟COM类通讯端口协议,…

使用clion向STM32H7外置flash下载代码

简介 根据安福莱的STM32H7教程,H7单片机的QSPI外设是直接连到芯片内核上的,地址是0X90000000;那么就可以通过QSPI外设,将外置flash内存映射,并由此执行代码。相关操作在keil5上比较简单,配置点东西就行;可以参考安福莱教程。 这里要介绍的是在linux环境下没有keil5 IDE的…

Windows和Ubuntu网络文件共享

Windows11访问Ubuntu22.04共享文件夹 ubuntu配置右键选中需要共享的文件夹,选择属性->本地网络共享;选中共享此目录、允许其他人创建和删除这个文件夹里的文件、允许匿名登陆;并设置共享名配置好之后,点击修改共享。如果没有安装过samba服务,则会提升安装samba相关依赖…

Linux下使用clion+cubemx+openocd开发stm32

简述 后面需要在linux下学习驱动开发,然后不想玩虚拟机,就直接安装了双系统。用kde桌面玩的蛮开心的,就索性把win下的开发内容都搬过来吧 在Linux下开发STM32,使用Clion和Cubemx开发,openocd调试,关于芯片下载,编译器选项,代码起始内容都需要自行通过工程的配置文件修改…

银行视频监控智能分析

视频监控智能分析银行系统通过安装在银行的营业厅、取款机处或者银行柜台以及银行门口等区域的各大品牌的终端监控摄像头,视频监控智能分析在系统后台软件上的视频画面内设置智能分析区域,通过上面的操作实现对银行的7*24小时的智能视频监控分析报警,对进出人员行为进行智能…

智慧港口视频智能分析系统解决方案

港口视频监控智能分析系统是对港口各处的监控回传的视频流利用视频监控智能分析技术进行智能分析处理,视频监控智能分析系统将处理结果然后传送到中心管理服务器或者流媒体服务器进行有效管理。监控中心设立在港口控制中心,主要用于相关工作人员进行远程监控和管理。港口监控…

电力视频监控系统

电力视频监控系统通过对电力工程建设领域利用电力视频监控系统进行违规违章操作检测及其他安全区域监测,电力视频监控系统可以降低或减少安全事故造成的人员伤害和设备损害,提升公司社会形象,杜绝违规行为的发生。视频智能分析系统可以进一步强化安全管理,能够降低电力安全…

2024 最新上海市提取公积金缴纳房租 All In One

2024 最新上海市提取公积金缴纳房租 All In One 提取公积金 图解教程2024 最新上海市提取公积金缴纳房租 All In One最新版(亲测可用 ✅)随申办市民云 Apphttps://apps.apple.com/cn/app/随申办市民云/id732618720 提取公积金 图解教程步骤 图解 备注1. 打开随申办 App / 小程序…

Windows上使用VTune分析PyTorchExtension调用的Cpp程序

概述 最近在实现一个通过PyTorch Extension扩展PyTorch算子的C++算法,需要分析代码的运行瓶颈进行针对性优化。Intel VTune就是一个能从汇编级和源码级分析CPU运行瓶颈的工具。由于不明原因我没在服务器上跑通命令行版的VTune,所以把程序搬到Windows下分析了,因此记录一下Wi…

[LeetCode] 80. Remove Duplicates from Sorted Array II

原来leetcode使用Count也不需要import collections class Solution:def removeDuplicates(self, nums: List[int]) -> int:# len =0if len(nums) == 0:return 0# elsecountList = Counter(nums)countModify = {key:min(value,2) for key,value in countList.items()}ret = […

个人标语

从来不觉得自己比任何人差,讨厌懒惰,骄傲自满与妄自菲薄。