第二次Blog作业

第二次作业集总结报告
前言
从最基础单货舱货物录入,到多货舱组合聚合设计,再到结合航空力矩重心计算的载重平衡系统。三套作业层层迭代、难度梯度明显,循序渐进训练类封装、类间关系、代码设计规范、业务逻辑落地能力,踩过输入、格式、算法、设计规范各类坑,也逐步建立起“先设计、后编码、重规范、抠细节”的编程思维,在此记录三次作业完整学习、设计、排错与反思全过程

一、作业集04:单货舱配载——初识类与单一职责

  1. 作业设计思路
    本次是面向对象入门实践,场景简化为单一货舱货物存储、排序、报表打印,核心目标学会拆分实体类与工具类
    我一共拆分5个独立类,完全贴合业务流程:Cargo实体类仅存储货物编号、重量等属性;CargoSorter单独承载冒泡排序逻辑;LoadManifest封装装载逻辑与报表生成;工具类分离业务,Main仅作为程序入口,杜绝主类臃肿
    使用SourceMonitor做代码质量检测,项目总代码78行,平均循环复杂度2.1,无冗余嵌套、无效分支代码。实体类只做数据存储,工具类只做单一功能处理,初步落地单一职责原则

作业集04类图

  1. 调试踩坑记录
    本次三个典型入门级bug,每一次提交扣分都对应一处细节短板:
    1) 缓冲区换行残留:先用nextInt()读取货物数量,后续nextLine()直接读取空字符串,全部输出空白。统一更换nextLine()读取后再强转数字,彻底解决输入缓存问题
    2) 冒泡排序升降序颠倒:题目要求货物重量降序,比较判断符号写反,第二次提交仅50分。修正循环内大小比较逻辑,排序结果匹配需求
    3)浮点数输出格式不达标:重量小数位数过多,采用String.format("%.1fkg", weight)统一格式化输出,严格对齐样例格式

  2. 代码优化方向
    1)排序优化:手写冒泡复杂度O(n²),大批量货物效率低,可使用Collections.sort配合Comparator简化代码、提升效率;
    2)完善封装:所有实体属性全部为public,违反封装思想,新增私有属性+getter/setter控制外部访问;
    3)输入容错:无非法输入校验,负数、非数字输入直接程序崩溃,增加数值合法性判断;
    4)职责拆分:报表打印逻辑与装载逻辑耦合,可新建ReportPrinter拆分打印功能

  3. 学习小结
    第一次作业打破了“全部代码写在main里”的过程式编程习惯,理解类与对象的基础作用,学会把现实货物业务拆分为独立代码模块。同时意识到输入输出、格式、循环判断这类微小细节,会直接影响全部测试用例得分,编写代码必须逐字对照题目要求校验

二、作业集05:多货舱配载——吃透组合、聚合与设计规范

  1. 作业设计思路
    作为V1版本迭代升级,难度大幅提升,核心约束为强制遵循单一职责原则,同时要求实现组合、聚合、依赖三类类间关系,必须严格按照给定类图编码,类结构错误直接判零分。
    本次共设计7个细粒度类,类间关系划分清晰:
  • 组合:CargoCompartmentPosition,位置依附货舱存在,生命周期同步;FlightCargoCompartment,货舱属于航班,无法独立存在;
  • 聚合:CargoCompartmentCargo,货物可独立创建,仅临时装载进货舱;
  • 依赖:Main依赖调度、校验工具类;LoadDispatcher依赖货物实体完成排序查找;InputValidator独立处理输入校验

通过SourceMonitor检测代码共152行,平均循环复杂度2.3,无冗余逻辑。每个类只承担一类功能:Position仅存储位置信息,InputValidator只做输入范围校验,调度类只负责排序检索,Main仅控制输入输出流程,代码可读性、可维护性相比第一次大幅提升

作业集05类图

  1. 调试踩坑记录
    本次扣分全部源于忽略题目硬性要求,教训十分深刻:
    1)中英文符号格式错误:首次提交0分,八成用例格式报错。中文冒号、输出文字缺少空格等细微格式差异,评测系统无法匹配标准答案,逐行统一替换英文符号、补齐输出空格后修复
    2)自行增加多余业务限制:误以为货舱行列会限制装载数量,额外增加装载上限判断,导致两条测试用例逻辑错误,删除自定义限制后恢复正常
    3)遗漏强制要求的方法:题目规定LoadDispatcher必须实现findCargo检索方法,即便主流程不调用,评测会校验类结构完整性,补全方法后全部用例通过

  2. 代码优化方向
    1)完善位置业务:Position仅创建未实际使用,后续可绑定货物坐标,记录每件货物在货舱内具体位置;
    2)异常捕获:非法数字、不存在货舱ID输入直接崩溃,增加try-catch捕获输入异常,给出友好提示;
    3)智能装载:当前装载失败直接丢弃货物,可自动检索空余载重货舱完成分配;
    4)单元测试:为新增货物、排序、检索核心方法编写单元测试,提前验证逻辑,避免提交大规模报错

  3. 学习小结
    本次作业真正区分“能跑通代码”和“设计规范代码”,彻底分清组合、聚合、依赖的代码实现区别,明白单一职责不只是概念,而是能落地拆分代码的实用标准。同时养成通读全文需求的习惯,不仅关注功能实现,类图、强制方法、输出格式等硬性约束同样是得分关键

三、作业集06:载重平衡系统——复杂业务+严格编码约束

  1. 作业设计思路
    三次作业难度峰值,在多货舱基础上新增旅客、行李、力矩重心航空业务计算,同时附加多条硬性编码限制:禁止继承、多态、Lambda;排序强制手写冒泡;类间关系严格区分组合/聚合/依赖。
    项目拆分9个类,粒度进一步细化,使用PowerDesigner绘制类图梳理关系:
  • 组合:PassengerLuggage,旅客内置行李对象,生命周期完全绑定;
  • 依赖:WeightBalance载重计算工具类,不持有航班对象,仅计算方法接收Flight参数,解耦计算与实体;
  • 关联:Flight同时关联货舱与旅客列表,一个航班包含多货舱、多名旅客

SourceMonitor统计总代码187行,平均循环复杂度2.5,无冗余嵌套。各类职责完全隔离:行李仅存重量、旅客统计自身总重、平衡计算类只处理力矩与重心公式,不存在跨职责代码耦合。三次作业合计3个Java文件、488行代码,19个实体与工具类,分支占比仅12.1%,方法平均语句仅3行,结构简洁规范

作业集06类图

  1. 调试踩坑记录
    本次bug覆盖输入校验、编码约束、物理计算精度三大维度:
    1)输入校验边界错误:误把货舱最少货物数设为1,忽略0件合法场景;装载校验时机后置,添加超重货物后无法回滚,调整为装载前校验解决
    2)违反编码约束扣分:误用Collections.sort,未手写冒泡排序,单次提交仅70分;手写冒泡时内层循环终止条件写错,排序结果紊乱,调试修正循环边界
    3)浮点数精度误差:空机力臂原始数值16.25,计算时提前四舍五入造成重心百分比偏差0.1%,规范处理:计算全程使用原始高精度数值,仅打印输出时保留一位小数,消除精度误差

  2. 代码优化方向
    1)统一输入工具:零散输入校验代码全部迁移至InputValidator,封装通用数字读取方法,消除Main重复代码;
    2)复用排序工具:输出货物报表前调用LoadDispatcher冒泡排序,实现货物按重量降序展示;
    3)拆分计算打印:WeightBalance同时完成计算与打印,违反单一职责,拆分为calculate()返回结果、print()负责格式化输出;
    4)扩充边界测试:补充旅客0人、货物0件、重心临界安全值等极端场景测试,提升程序容错能力

  3. 学习小结
    本次作业将面向对象设计与真实行业业务结合,学会纯工具类的解耦设计思路,能把复杂物理计算公式转化为严谨稳定的程序逻辑。同时暴露自身短板:容易忽略题目编码限制、代码复用意识弱、浮点数精度处理经验不足。后续会重点学习设计模式,提升代码扩展性

四、整体总结与课程建议
1.个人学习收获
三套迭代作业循序渐进,完整走完Java面向对象入门学习路线。从只会写过程式代码,到能自主拆分实体、工具类,熟练区分组合、聚合、依赖关系,深刻理解单一职责原则的实际价值;同时积累大量输入输出、排序、浮点数、格式匹配的排错经验,调试代码效率大幅提升
前期只关注功能能否运行,后期逐渐重视代码结构、设计规范、题目隐性约束,建立起规范编程思维,为后续复杂项目、设计模式学习打下基础

2.现存不足
1)审题不够细致,容易遗漏类结构、排序方式、输出格式等强制要求;
2)代码复用意识薄弱,重复校验、输入代码分散在多个位置;
3)浮点数运算、边界数值校验的细节处理经验不足;
4)缺少提前自测习惯,总是提交后才发现大批量逻辑错误

3.课程改进建议
1)增加代码调试实操教学,讲解常见输入缓存、浮点数精度、排序边界等高频bug快速定位方法;
2)作业增设预提交环节,可提前上传类图、基础代码,老师提前纠正设计错误,避免后期大规模重构;
3)补充航空配载、物流管理等真实业务案例讲解,结合业务场景解释设计原则的实际意义;
4)阶段性增加单元测试基础教学,教会我们提前自测核心方法,减少提交扣分

五、附录
本次三次迭代作业集代码全程通过 SourceMonitor 工具进行标准化代码质量检测,整体项目累计包含 19 个 Java 源文件、488 行有效业务代码,共计定义 19 个功能类,完整覆盖单货舱配载、多货舱管理、航空载重平衡计算全业务场景。工具分析结果显示,整套代码分支占比仅为 12.1%,无复杂嵌套、冗余分支与无效逻辑,代码执行链路简洁清晰;项目平均每个方法仅包含 3 条执行语句,方法粒度精细、逻辑单一,有效规避了大段耦合代码;平均每个类包含 3 个核心方法,各类职责划分明确、粒度适中,全程严格遵循面向对象单一职责原则。整套迭代代码结构规整、耦合度低、可复用性与可维护性强,从基础功能实现、类关系设计到代码规范落地均符合高质量 Java 面向对象编程开发标准。

屏幕截图 2026-06-24 144721

屏幕截图 2026-06-24 144835

posted on 2026-06-24 14:50  wsdjj  阅读(4)  评论(0)    收藏  举报