当前位置: 首页 > news >正文

java作业集1-3总结性blog

一、前言
一共有3次关于航空器配载的作业,整体围绕飞机货运配载、多货舱管理、载重平衡计算等功能进行编写,题量适中、难度一次比一次难,知识点衔接紧密,在上一次作业的基础上每次增加一点新功能,贴合航空配载基础业务逻辑,通过三次练习,逐渐掌握相关的编程技巧和航空方面知识。

从知识点来看,作业1主要是基础航班货运配载,核心是类的单一职责设计、航班信息管理、货物按重量排序及超载判断;作业2增加功能变为多货舱管理,新增货舱信息(标识、载重、位置网格)、货物指定货舱装载的逻辑;作业3新增旅客和行李管理,核心是载重平衡计算(力矩、重心、重心百分比核算),还有输入校验、手写冒泡排序等技巧。

从题量来看,三次作业题量比较合理:作业1题量最少,只需实现基础装载和判断功能;作业2题量略有增加,增加了多货舱的管理和装载逻辑;作业3题量最多,要完成旅客、货物、配平计算等多个模块。同时三次作业都需要做到单一职责和封闭性原则。

从难度来看,三次作业难度是循序渐进的,作业1难度最低,掌握基础类设计和简单逻辑就行;作业2难度中等,需要弄清楚多个类之间的关系,实现多货舱的装载判断;作业3难度最大,需要编写许多配平计算的公式,做好输入校验,对编程能力和逻辑思维要求更高。
二、设计与分析
(一)NCHU_航空器配载与货运管理系统1
1.源码设计分析:本次作业主要有4个类,完全遵循单一职责原则。Flight类负责存储航班信息(航班号、最大业载重量),提供getter方法;Cargo类存储货物信息(名称、重量);LoadManager类负责货物装载、重量计算、超载判断;Main类负责输入输出。

2.SourceMonitor分析:项目代码约102行,包含15个方法,平均方法复杂度 为2.3,整体无复杂逻辑。核心方法LoadManager.addCargo(货物排序与重量计算)实现简洁高效,执行效率表现良好。
屏幕截图 2026-05-16 131759

3.PowerDesigner类图:Flight类与LoadManager类为依赖关系,LoadManager类与Cargo类为聚合关系。
diagram

  1. 心得:作业1核心是理解单一责原则,刚开始会比较容易把多个功能放在同一个类里的问题,在先确定每个类应该做什么后,再写代码可以让代码结构更清晰同时也更便于后续的维护工作。

(二)航班货运配载模块(迭代二)—— 多货舱管理与重量排序装载

1.源码设计分析:在作业1基础上新增2个类(Position类、InputValidator类),共7个类,延续单一职责原则。Position类仅负责表示货舱中的位置(行、列),提供位置名称方法;InputValidator类仅负责输入数据的合法性校验;CargoCompartment类新增位置网格生成、货物装载判断功能,Flight类新增货舱列表管理,LoadDispatcher类负责货物排序和查找。

2.SourceMonitor分析:项目代码约259行,包含7个类、约30个方法,平均方法语句数 3.30,整体无复杂逻辑。核心方法LoadManager.addCargo(货物排序与重量计算)实现简洁高效,执行效率表现良好;项目最大圈复杂度为 6,代码结构清晰。
image

  1. PowerDesigner类图:类图中新增Position类与CargoCompartment类的组合关系,CargoCompartment类与Cargo类的聚合关系,Flight类与CargoCompartment类的关联关系,类间关系明确,符合题目要求的组合、聚合关系设计。

2

  1. 心得:作业2的重点是多货舱管理和类间关系的设计,刚开始容易混淆组合关系和聚合关系,通过绘制类图,明确了Position类是CargoCompartment类的组成部分,而Cargo类可独立于货舱存在,同时输入校验类的引入,让代码的鲁棒性有所提升。

(三)航空器配载与货运管理系统——配平计算

  1. 源码设计分析:在作业2基础上新增4个类(Passenger类、Luggage类、WeightBalanceCalculator类,优化InputValidator类),共11个类,严格遵循题目要求,无继承、多态。Passenger类组合Luggage类,只负责计算旅客总重量;Luggage类只记录行李重量;WeightBalanceCalculator类作为纯计算工具类,只负责配平计算;InputValidator类优化后,只提供统一的输入校验静态方法;原有Flight类新增旅客列表管理,LoadDispatcher类改用手写冒泡排序,禁止使用朗姆达和Collections.sort()表达式。

2.SourceMonitor 分析:项目代码约418行,含11个类、40余个方法,平均方法语句数 4.71。项目最大圈复杂度为 20,核心业务方法存在一定复杂度偏高问题,注释率为 0%。

image

3.PowerDesigner类图:类图中新增Passenger类与Luggage类的组合关系,WeightBalanceCalculator类与Flight类的依赖关系,Flight类与Passenger类的关联关系,所有类职责单一,类间关系清晰。

3

4.心得:作业3是最复杂的一次作业,核心难点是多个模块的联动逻辑。理解了航空配载中重心计算的基本原理,同时知道单一职责原则在复杂系统中的重要性,每个类只做一件事,即使模块增多,也能保证代码逻辑清晰、便于调试。

三、踩坑心得
(1)作业一:Scanner输入异常,nextLine()读取回车符,导致航班号或货物名称读取失败。
具体情况:输入最大业载重量后,直接使用nextLine()读取货物名称,导致读取到的是回车符,程序报错,无法正常运行。但是我在修改后在不同的地方加入scanner.nextLine();结果有的时候是对的,有的时候是错的,有的时候得分变高,有的时候又没分了。我发现不能在所有的读取后面再加一个nextLine(),他只有在特定的位置上面加得分才会变高,所以输入输出的细节很重要,不同类型的输入方法混用容易出现异常,要牢记Scanner的使用技巧。
(2)作业二:主要是类变多了然后比较难找到类和类之间的关系,而且这个要有封闭性,所以我觉得先理清楚关系再去写代码会更好一点
(3)作业三:这个题目给的数据和输出的数据不太一样,所以要自己手动去改一下,然后就是有很多的测试点不通过,要自己一点点地去试,然后就算是格式错误什么的也要自己去试,所以还是要多去试试不同的输入数据去调数据点。最初设计时,Passenger类的Luggage对象通过构造器传入,且提供了getLuggage()方法,允许外部获取Luggage对象并修改行李重量,违背了组合关系的要求,也不符合题目中行李对象必须在Passenger构造器内部new出来,不对外暴露修改的规定。Passenger类的构造器参数为Luggage对象,而非行李重量,导致Luggage对象可在外部创建和修改,破坏了组合关系的封装性。组合关系的核心是“封装性”,不对外暴露成员对象的修改接口,否则会破坏类的封装性,也违背了单一职责原则,设计时需明确类的封装范围,避免对外暴露不必要的属性和方法。

四、改进建议
三次作业都可以多用list列表来进行运行,我有的时候使用数组,这个就会比较繁琐,可以去简化代码,同时可以去增加异常处理功能,然后完善排序逻辑和查找功能。对于复杂的算法,还需要进一步练习,提升算法的效率和规范性,尤其是手写算法的能力,避免出现逻辑漏洞;类的使用还不够熟练,需要加强练习,解决小数精度偏差的问题。当前的类设计虽然遵循单一职责原则,但在复杂系统的联动逻辑上还存在不足,学会设计更具可扩展性、可维护性的系统,适应更复杂的业务场景。对航空配载的真实业务场景了解还不够深入,仅掌握了基础的配载和配平计算,后续可进一步学习航空配载的相关规范和标准,了解更多真实业务中的细节和需求,让代码更贴合实际应用。完善输入校验功能:在InputValidator类中,新增货物重量的范围校验(如货物重量不能超过对应货舱的剩余载重),提前判断货物是否能装载,避免添加货物后才提示超载,提升程序的交互性。优化货物排序逻辑,作业1将排序逻辑放在LoadManager类中,可迁移到专门的LoadDispatcher类,进一步明确职责划分,让LoadManager类仅负责装载和计算,LoadDispatcher类负责排序和查找,提升代码的可复用性。

五、总结
通过完成三次航空器配载相关作业,我不仅掌握了面向对象编程的核心技巧,也对航空配载的基础业务逻辑有了清晰的了解。在编程方面,掌握了类的单一职责原则、类间关系的设计,学会了写冒泡排序、输入校验、公式计算等技巧,提升了代码的规范性、可读性和鲁棒性;理解方面也得到了提升,从一开始的货物装载,到多货舱管理,再到载重平衡计算,逐步了解了航空配载的全流程。同时,在解决作业中遇到的问题时,我学会了主动排查错误、调试代码,培养了严谨的编程思维,也意识到细节的重要性,一个小小的逻辑错误都可能导致整个程序无法正常运行,尤其是在航空配载这种对准确性要求高的场景中,严谨性至关重要。此外,通过绘制类图、分析SourceMonitor报表,我也学会了梳理代码结构、优化代码性能等技巧。

然后我觉得我还要多去学习一些比较复杂的算法,不能仅仅就靠一些简单的算法,这样写出的代码会很繁杂,然后要多去学习靠自己调试代码来帮助去完成测试点。我觉得我在调试和理解题目这方面还是有点欠缺,而且我不是很能理清类与类之间的关系,写代码的时候有时候不知道应该怎么去写代码,知道的知识和技巧还是太少了,只会一些基础的。

对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见的话,我觉得课程可以多和书上的内容或者是ppt相关联,不仅仅是单纯的去讲知识点因为那样的话可能只能靠听但是不能看到。然后希望作业还有考试啥的能够简单点或者说时间放长一点,因为我这个人就是想题目就要一会时间所以导致我一直写不完...希望作业中可提供更多的测试用例(包括正常数据、边界数据、异常数据),方便在编写代码时进行测试,及时发现问题;

http://www.jsqmd.com/news/830141/

相关文章:

  • 3招引爆阴阳师百鬼夜行自动化脚本:效率飙升实战秘籍
  • 抖音创作者开源工具箱:数据采集、内容处理与自动化工作流实战
  • RPG Maker游戏资源解密工具:快速提取加密文件的终极指南
  • LeetCode Hot 100 - 爬楼梯完全题解
  • 别再只会用next了!GDB调试实战:用until、finish和jump命令快速定位Linux C/C++程序中的内存泄漏
  • 基于红外对射传感器与Adafruit IO的智能邮箱检测系统实战
  • 告别内网穿透:用动态IPv6与云解析打造永在线的家庭服务器
  • Arduino ESP32终极开发指南:从零开始构建物联网项目
  • LAMMPS分子动力学模拟终极指南:从零开始掌握原子级计算
  • sklearn实战:NearestNeighbors核心参数与算法选择全解析
  • 从狗腿布线到单元上布线:聊聊VLSI物理设计中那些有趣的布线算法(附图解)
  • ESP32深度睡眠后时间怎么同步?SNTP低功耗时间管理保姆级教程
  • 2026年4月专业的盖板模具实力厂家推荐,井盖井篦子模具/装配式围墙模具/标志桩模具/仿古地砖模具,盖板模具厂家有哪些 - 品牌推荐师
  • RouterOS 7.x 虚拟机部署避坑指南:从ISO安装到License激活的完整流程
  • 可穿戴电子圣诞帽制作:NeoPixel灯带与Fosshape面料融合实践
  • 如何构建本地化缠论量化分析平台实现几何交易可视化?
  • 探索Taotoken模型广场如何辅助开发者进行模型选型与切换
  • Steam挂刀行情站:3步实现智能交易决策的开源数据分析工具
  • Nuendo 4.3 声卡设置保姆级教程:从‘No Driver’到完美出声,手把手解决音频工程无声问题
  • FPGA异构计算与模块化SoM:赋能边缘智能与工业应用实战
  • 新手如何通过Taotoken控制台快速创建并管理自己的API Key
  • ROS机器人视觉开发避坑:image_transport发布图片时,为什么你的Topic名字总是不对?
  • 从零构建LAMMPS in文件:分子动力学模拟的完整流程解析
  • 2026年4月本地评价好的HAST试验箱生产厂家推荐分析,高低温交变量热试验箱/砂尘试验箱,HAST试验箱公司推荐分析 - 品牌推荐师
  • MES系统_AI开发
  • Codex安装与VS Code联动
  • 我的文件夹乱到自己都找不到自己,直到我让它学会了自动分类
  • 087、机器人运动学:雅可比矩阵
  • 微信小程序转Vue3完整指南:miniprogram-to-vue3架构深度解析与实战方案
  • DIY冥想训练器:基于心率变异性(HRV)的生物反馈设备制作指南