第一次bloge作业

本阶段三次作业围绕“航班配载系统”逐步深入,从单一货舱的简单装载,到多货舱协同、货物按重量排序分配,最后引入旅客重量与重心平衡计算。整体知识点覆盖:面向对象基础(类、封装、集合)、排序算法(选择排序/冒泡排序)、输入校验、重量与力矩计算

1.三次作业代码量递增。作业1约150行,作业2约250行,作业3约400行,但核心逻辑清晰,逐步迭代。

2.作业1入门级,作业2增加货舱管理和重量排序,作业3引入物理计算(重心、力矩)和复杂输出格式,难度适中。

3.三次作业均要求自行设计类结构,并处理边界情况(超载、负数输入、货舱容量不足等),培养了模块化编程思维。

3次类图如图所示

作业1奠定了基本类结构,但Flight.sort()直接修改原列表,破坏封装;且无输入校验,负数重量会导致错误结果。

作业2 addCargo仅在未超载时添加,但失败后没有重试机制(其他货舱),不符合实际配载需求

作业3力臂值直接写在方法内,若货舱数量或位置变化,需修改源码,可读性差。应作

作业2:货物找不到目标货舱

问题:flight.findCompartmentById返回null时,后续调用comp.addCargo会引发NullPointerException。题目样例中保证所有targetCompId都存在,但防御性编程缺失。

作业3:重量与力矩的单位一致性

问题:旅客体重常量BODY_WEIGHT = 75.0(kg),行李重量由输入给出,但未考虑行李力臂?实际上行李跟随旅客,力臂同旅客(18m),正确。但初期我误将行李单独计算力矩,导致重心偏差。

作业3中,若前舱或后舱超载,直接System.exit(0)。这在实际系统中不可接受,应该提示用户重新输入。但鉴于题目要求“若超过最大载重则输出警告并退出”,符合规范。

当前addCargo返回boolean,但装载失败后无后续处理。建议增加自动寻找最佳货舱的功能:

读取所有货舱列表,按剩余容量重心影响排序,依次尝试装入。

实现一个loadOptimized方法,模拟真实配载系统。

作业1选择排序、作业3冒泡排序都是硬编码。可以设计SortStrategy接口,允许运行时切换排序算法(按重量、按ID、按优先级等),符合开闭原则。

作业3中的力臂、MAC长度等常量应存储在配置文件(如balance.properties)或数据库,而不是写在代码中。这样当机型改变时,无需修改源码。

重量和力矩计算涉及多次累加,使用double可能产生微小误差。在航空领域,建议使用BigDecimal并指定舍入模式,确保合规。

总结

1.通过这三次作业,我深入理解了:

面向对象封装:将数据与行为绑定到类中,避免外部直接操作内部字段。

集合框架:ArrayList的增删改查及排序。

排序算法实践:选择排序、冒泡排序的手写实现,以及Comparator的Lambda简化写法。

输入健壮性:使用独立Validator类统一检查负数、范围等。

物理计算编程:力矩平衡公式、重心百分比计算,并输出格式化报表。

2.需要进一步学习的地方

设计模式:当前代码耦合度较高,可学习工厂模式创建货舱、策略模式处理排序。

异常处理:目前使用System.exit(0)直接终止,应改为抛出自定义异常并捕获。

文件IO:实际配载系统需要从文件读取航班、货物信息,输出舱单到文件,后续可扩展。

图形界面:可尝试用JavaFX或Swing制作简单的配载可视化工具。

3 .对课程的建议

作业层次感强:从简单到复杂,非常适合初学者逐步提升。建议后续增加迭代式需求变更,锻炼重构能力。

测试用例公开:每次作业若能提供几组隐藏测试数据,可帮助自测边界情况。

Code Review环节:建议组织同学互相审查代码,发现不同设计思路,促进交流。

总之,这三次作业让我体验了一个小型航空配载系统的开发流程,既有编码技巧的提升,也加深了对物理概念在软件中落地的理解。感谢老师的精心设计!

posted @ 2026-05-18 20:37  邶风诗语  阅读(7)  评论(0)    收藏  举报