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

面向对象编程——三次PTA作业总结

一、前言
该三次作业为同一个显示背景下,同一个问题的不断精细化的过程,难度逐渐递增。
它考察对类的使用,类与类之间的关联方法,类与类之间的依赖,聚合,组合等关系,例如在Flight类中会有货舱类,乘客类等。
还有数据封装后的使用,题目中每个类中的数据成员都是类可见,但又要在别的类中调用,所以就需要用到getter和setter方法,让数据可使用。
静态和非静态方法的区别和使用方法,此三次作业中InputValidator数据检验类,LoadDispatcher数据处理类中的方法都应该是静态的,因为这两个类中的方法是需要不经过实例化而直接通过类名调用的,所以应该是静态方法。
对数组的使用,本次题目中的货物都是储存在数组中,如果对数组的掌握不够熟练的话,题目是很难写出来的,还有ArrayList的使用,ArrayList包中有很多方法可以简化我们的代码,所以如果掌握的话,对题目的解决很有帮助。
本次题目的题量不算特别特别大吧,因为给的时间较为充裕,所以我觉得如果花了足够的时间的话还是可以解决的,而且由于本次题目关联较大,难度也是逐渐递增的,如果掌握和理解了前一题,其实后一题的改动不能说特别特别大,就是还是可以在前一题的基础上改动的,所以会比完全没有关联的题目要稍微好一点点代码量少一点,逻辑也会稍微清晰一点。

二、设计与分析

第一次作业

作业要求
设计一个基础的航班货运配载模块。系统需要记录航班的基本信息(航班号、最大起飞重量、最大业载重量)。地勤人员可以按照货物重量从高到低向该航班添加货物(货物名称、重量)。系统需要实时计算当前已装载的总重量,并判断是否超载。

实现方式
通过ArrayList储存货物数据,保存在Flight类中,后通过CargoSorter和Cargo类对数据进行调用,处理和输出。

代码规模
第一次代码规模如下
image
代码分析:所有类复杂度全优秀:Max Complexity最高仅5(CargoSorter),无高风险类;Main类拆分极好:仅23行,逻辑干净,没有堆砌;实体类/工具类均衡:Cargo、Flight、LoadManifest的语句数适中,方法拆分合理。但是 注释率普遍偏低:最高仅12.1%(Flight),其余几乎无注释;CargoSorter分支偏多:% Branches=25%,排序逻辑分支较多,可适度优化。

类图
第一次代码类图如下:
屏幕截图 2026-05-17 173324

编写过程
最开始时使用一维数组储存Cargo数据,代码会较为复杂,后使用ArrayList数组,调用,传参等使用方法都会方便很多。
有ArrayList数组的类,在编写构造方法时经常忘记实例化ArrayList对象,所以可以在定义的同时实例化,这样就不用在构造方法中初始化了。
写题目时,对货物重量排序的测试点一直过不去,后将冒泡排序改成选择排序即可通过。

第二次作业

作业要求
设计一个扩展的航班货运配载模块,实现以下功能:
航班信息管理:记录航班号、最大起飞重量、最大业载重量。

  1. 货舱管理:
    每个货舱有唯一标识(如“前舱”)、最大载重、行数、列数(组成位置网格)。
    货舱与其位置是组合关系(CargoCompartment 创建时内部生成 Position 列表)。
    货舱与装载的货物是聚合关系(Cargo 可独立存在)。
  2. 货物装载:
    输入所有待装载货物(名称、重量、目标货舱ID)。
    系统先按货物重量从高到低排序,再依次尝试将货物装入指定的货舱。
    如果目标货舱的当前重量 + 该货物重量 ≤ 该货舱最大载重,则装载成功,否则装载失败并给出提示。
  3. 输出要求:
    按排序后的顺序输出每件货物的装载结果(成功或失败)。
    输出每个货舱的已装载总重量及状态(是否超载)。
    输出航班整体总重量及与最大起飞重量、最大业载重量的对比,判断整体是否超载。

实现方式
在Flight类中添加ArrayList<CargoCompartment>货舱类,再在货舱类中添加ArrayList<Cargo>货物类,后就可通过Flight类对象调用和管理Cargo的数据了。
在LoadDispatcher类中实现调度,排序和查找方法,以供其他类使用;在InputValidator类中实现数据检验方法,以供其他类使用。

代码规模
第二次代码规模如下:
屏幕截图 2026-05-17 194411
代码分析:整体复杂度控制优秀:绝大多数类的 Max Complexity ≤5,仅Main.java=5、InputValidator.java=4,完全在优秀范围;Cargo/Position等实体类极简:Max Complexity=1,纯数据封装,职责清晰;分支逻辑少:% Branches普遍偏低,仅LoadDispatcher=37.5%(小工具类,可接受); 方法拆分合理:Avg Stmts/Method最高仅33(Main,主函数入口,正常),业务类均≤7,方法不臃肿。但是,注释率偏低:多数文件% Comments<3%,几乎无注释,后续维护会吃力;Main类语句偏多:37行语句,主类可拆分成更多工具类/服务类。

类图
第二次类图如下:
屏幕截图 2026-05-17 200552

编写过程
因为此次题目是第一次题目的细化升级,所以第一次作业中的功能第二次依然要实现。
在CargoCompartment类中添加ArrayList<Position>位置类,和ArrayList<CargoCompartment>货舱类,分为前舱和后舱,在数组中的位置为0和1。
所以添加货物时就要选择前舱或后舱,且前舱和后舱是否超重需分别计算。
在InputValidator数据检验类中,要增加CargoCompartment类计算是否超重的方法,输出根据题目要求输出。
在对货物进行排序时,选择排序不正确,需使用冒泡排序。

第三次作业

作业要求
在前两次题目的基础上,由于在航空器配载中,所有装载项(旅客、前舱货物、后舱货物)都有其对应的力臂。重量乘以力臂等于力矩。所有力矩之和除以总重量,即为飞机的实际重心。为了统一标准,实际重心需要换算为占平均空气动力弦(MAC)的百分比。

实现方式
在前两次题目的基础上添加4个类,分别负责管理旅客姓名及计算旅客总重量(Passenger类)、记录行李重量(Luggage类)、根据航空力学公式计算总重量、总力矩、重心及百分比(WeightBalanceCalculator类)和提供统一的获取整数、浮点数的静态方法(InputValidator类)。

代码规模
第三次作业代码规模如下:
屏幕截图 2026-05-17 203935
代码分析:相比前两题新增类更细分:多了Luggage、Passenger、WeightBalanceCalculator,单一职责做得更好; 基础实体类极精简:Cargo.java仅8行、Position.java仅4行,完全符合POJO规范;工具类复杂度极低:InputValidator、LoadDispatcher的Max Complexity=0,无复杂分支。但是Main.java臃肿:

  • Lines=121、Statements=99、Avg Stmts/Method=95(单方法95行代码)
  • Max Complexity=19(严重超标! 圈复杂度>10就属于高风险,极易出bug、难调试)

类图
第三次作业类图如下:
屏幕截图 2026-05-17 205341

编写过程
先不管对货物的排序,跟第一次,第二次作业类似的过程写出基本结构。
在Flight中加入ArrayList<Passenger>成员,还有乘客和行李重量计算方法,并且Passenger类中有Luggage类成员,还有乘客重量计算方法。
创建WeightBalanceCalculator类,根据题目给出的计算方法计算重心和力臂等数据。
创建InputValidator类,在第二次的基础上加入数据合法性判断,如数据是否为负数,数据是否超出范围,若超出则提示。

三、踩坑和心得

  1. 开始时使用一维数组作为连接货物与货物的方法,但其大小固定,下标也较为繁琐,后改为使用ArrayList,会方便很多,所以在需要使用数组之类的题目时,均可使用ArrayList代替。
  2. 题目如果排序一直错误,且经过检查后发现没有错误,可以试试更换排序算法,可能每个题目的所需算法和复杂度不同。
  3. 如果使用ArrayList数组,最好在让它作为数据成员的时候就实例化,因为构造方法中很容易将ArrayList的实例化遗漏。
  4. 题目如果一直过不去,可以多考虑边界值,边界值通常都会有一些特殊情况,需要特殊考虑,就像第三题中的最小值是1而非0.
  5. 写题目时一定不能急躁,一旦着急或是烦躁了会跟容易写不出来,要静下心慢慢思考,相信自己能够写出来。

四、改进和建议
第一题没有对数据进行校验,如果输入负数程序不会提示,与实际情况不符合。
第二题对排序使用的算法未直接说明,我觉得可以稍做提示,避免因为算法使用不一样就不正确,不过这样可以锻炼大家的耐心,也有一点好处吧。
第三题的Position包括前两次作业的都没使用到,我觉得可以让位置和货物关联起来,即每个物品都有它自己的位置,可以通过位置查找货物。

五、总结
本次三次作业围绕航班货运配载问题逐步迭代、难度递增,重点考察了Java面向对象编程核心知识,包括类的设计、类间关联关系、封装特性、静态方法使用以及集合与算法的应用。
作业从基础货物装载,逐步拓展到货舱分区管理、飞机重心配平计算,实现了功能的精细化升级。设计中运用了依赖、聚合、组合等类间关系,通过getter/setter完成数据封装,利用静态工具类实现数据校验与调度处理;同时借助ArrayList简化数组操作,根据需求灵活调整排序算法,解决了货物排序、超重判断、重心换算等核心问题。
编写过程中也遇到诸多问题,从最初使用一维数组的繁琐,到改用ArrayList简化逻辑;从排序算法适配错误,到边界值考虑不周,都在调试中积累了经验,认识到提前实例化集合、重视边界测试的重要性,也锻炼了耐心与问题排查能力。
三次作业也暴露出不足:首次作业缺少数据校验,输入非法数据无法提示;部分题目对算法要求未做明确指引;Position位置类未与货物装载结合使用。后续可补充数据校验逻辑、优化题目指引、完善位置与货物的关联设计,进一步贴合实际业务场景。
整体而言,三次作业完整锻炼了面向对象设计、代码调试与问题优化能力,循序渐进的模式也帮助我扎实掌握了相关编程知识点。我觉得这种循序渐进的方法还是很好的。

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

相关文章:

  • 2026Q2成都磁吸挡风门帘安装技术标准与避坑指南:成都空调门帘安装/成都细条门帘厂家/成都细条门帘安装/成都透明门帘厂家/选择指南 - 优质品牌商家
  • 2026年南京沙发翻新优选|匠阁沙发翻新、御匠沙发翻新、锦修沙发翻新三大品牌全解析、服务内容、覆盖区域与联系方式 - 卓信营销
  • 2026Q2变频式防爆正压柜技术解析与权威厂家指南:防爆正压柜生产厂家/防爆空调价格/防爆空调生产厂家/防腐防爆正压柜/选择指南 - 优质品牌商家
  • 2026 年东莞沙发翻新优选|匠阁沙发翻新、御匠沙发翻新、锦修沙发翻新三大品牌全解析、服务内容、覆盖区域与联系方式 - 卓信营销
  • 2026年近期青岛岩板生产商综合实力盘点:谁才是信誉与品质的担当? - 2026年企业推荐榜
  • 2026年Q2树脂井盖厂家选型:树脂井盖/树脂复合井盖/树脂复合篦子/树脂复合雨篦子/树脂篦子/树脂雨篦子/水表井盖/选择指南 - 优质品牌商家
  • 2026天猫虚拟类目入驻资质解析及靠谱服务商名录:天猫虚拟类目入驻需要什么资质/天猫虚拟类目哪个公司代开店铺比较专业/选择指南 - 优质品牌商家
  • 2026Q2:201不锈钢板、304 不锈钢卷、316L不锈钢卷、不锈钢卷板、不锈钢板卷材、不锈钢板平板、厚壁不锈钢板选择指南 - 优质品牌商家
  • 2026石英玻璃定制全攻略:石英玻璃公司/石英玻璃加工/石英玻璃厂家/石英玻璃定制/石英玻璃片/石英玻璃管/耐高温石英玻璃/选择指南 - 优质品牌商家
  • 5月15日(SCRUM)
  • 2026年宁波沙发翻新优选|匠阁沙发翻新、御匠沙发翻新、锦修沙发翻新三大品牌全解析、服务内容、覆盖区域与联系方式 - 卓信营销
  • 2025-2026年北京润府电话查询:预约前请核实项目资质与交易条件 - 品牌推荐
  • 2026年青岛沙发翻新优选|匠阁沙发翻新、御匠沙发翻新、锦修沙发翻新三大品牌全解析、服务内容、覆盖区域与联系方式 - 卓信营销
  • 2026年深圳品质管理源头革新:一笔划工厂规划咨询有限公司如何赋能制造企业 - 2026年企业推荐榜
  • 2026宜宾家装技术解析:宜宾排名前十的装修公司、宜宾装修公司哪家好、宜宾装修公司推荐、宜宾装修公司电话、宜宾装饰公司口碑选择指南 - 优质品牌商家
  • 2025-2026年北京明日丝路物位传感技术有限公司电话查询:联系前需核实产品适用场景 - 品牌推荐
  • 2026年5月重卡充电桩品牌推荐:五大厂家排名评测物流园防高能耗 - 品牌推荐
  • 养老服务管理平台选哪家:智慧养老平台收费标准/智慧养老服务平台/智慧养老监管平台/智慧养老设备怎么接入平台/智能报警器/选择指南 - 优质品牌商家
  • SCRUM4
  • 2026年5月更新:山东实力仿木纹护栏定制厂家推荐,浩阳金属制造(15315753339)综合 - 2026年企业推荐榜
  • 2026年5月江门沙发订制深度解析:聚焦可靠性与高性价比之选 - 2026年企业推荐榜
  • Cloudflare Workers 和通用 Serverless 函数在边缘计算场景下有什么区别
  • 5月14日(SCRUM)
  • 2026四川钢筋网片优质厂家TOP5推荐:钢笆片厂家电话、钢笆片生产厂家、钢筋网片价格、钢筋网片公司推荐、钢筋网片厂家推荐选择指南 - 优质品牌商家
  • 2026年郑州沙发翻新优选|匠阁沙发翻新、御匠沙发翻新、锦修沙发翻新三大品牌全解析、服务内容、覆盖区域与联系方式 - 卓信营销
  • 2026年长沙沙发翻新优选|匠阁沙发翻新、御匠沙发翻新、锦修沙发翻新三大品牌全解析、服务内容、覆盖区域与联系方式 - 卓信营销
  • 2026年厦门玄关柜选购指南:如何甄别靠谱厂家与优选星铝全铝家居 - 2026年企业推荐榜
  • 2026热管冷媒充注机厂家排行:散热行业冷媒加注机厂家推荐、汽车冷媒加注机厂家推荐、热管冷媒充注机厂家推荐、防爆冷媒加注机推荐选择指南 - 优质品牌商家
  • 2025-2026年上海光华专利事务所电话查询:选择知识产权服务前需关注资质与流程 - 品牌推荐
  • 2025-2026年上海多弢实业有限公司电话查询:使用前请核实资质与合同条款 - 品牌推荐