南昌航空大学-25201433-夏晨骞-作业集1-3总结

航空器配载与货运管理系统——三次作业综合总结Blog

一、前言

这三次作业整体是围绕“航空器配载系统”逐步扩展完成的,从最开始的简单货物重量计算,到多货舱管理,再到最后加入旅客、行李以及飞机配平计算,整体难度是逐步上升的。

刚开始做第一次作业的时候,我的理解其实比较简单,就是:

输入货物 → 排序 → 计算总重量 → 判断是否超载

但随着第二次、第三次作业的推进,系统逐渐变得复杂,不再只是简单的数据处理,而是开始涉及:

多对象之间的关系
类之间的职责划分
复杂业务逻辑(超载判断、分舱、调度)
甚至第三次作业还加入了物理计算(力矩与重心)

整体做下来最大的感受是:
代码量不是最难的,真正难的是“结构一旦没设计好,后面全部会乱”。

二、第一次作业——基础航班货运配载模块

  1. 题目理解

第一次作业整体比较简单,主要包括:

航班信息输入
货物信息输入
货物按重量排序
计算总重量
判断是否超载

刚开始我基本是按照“能跑出来就行”的思路写的。

  1. 初期实现方式问题

最开始我的代码结构比较混乱,主要问题是:

所有逻辑都写在Main里
Flight类承担了太多职责
排序、计算、输出混在一起
if/else判断较多

当时其实没有意识到结构问题,只是觉得“能出结果就行”。

但后面开始改输出格式的时候,就发现问题了:

改一个地方,经常会影响其他地方

  1. 第一个真实Bug:Scanner输入问题

这个Bug是整个三次作业里最早遇到的,也是卡得比较久的。

代码类似:

int n = sc.nextInt();
String name = sc.nextLine();

结果发现:

👉 name永远读不到

当时我一开始以为是输入格式错了,还反复改测试数据。

后来才发现:

nextInt()不会读取换行符
nextLine()直接读到了空行

解决方式是:

sc.nextLine();
String name = sc.nextLine();

这个问题虽然简单,但当时确实浪费了不少时间。

  1. 排序Bug

第一次写排序的时候,我写成:

Double.compare(a, b)

结果是升序,而题目需要降序。

后来改成:

Double.compare(b, a)

才正确。

这个问题属于“API知道但用反”的情况。

  1. 累加逻辑错误

还有一个比较隐蔽的问题:

total = cargo.getWeight();

导致总重量一直是最后一个货物。

后来才改成:

total += cargo.getWeight();

6.超载测试bug

image

![image]
一开始超载测试点一直过不去,气得我都不想改了,后面在复盘重做一遍发现该测试点存在一个典型边界情况:

totalWeight == maxWeight
导致:

“刚好等于最大载重”时仍被判定为正常,
统一最终判断状态

将状态判断从循环中移出:

if(totalWeight <= maxWeight){
status = "正常";
}else{
status = "严重超载";
}

7.复杂度分析

屏幕截图 2026-05-18 210634

8.类图

屏幕截图 2026-05-18 212928

  1. 小结

第一次作业让我开始意识到:

程序不能全部写在一个类里
数据需要结构化管理
输出格式非常容易出错
调试比写代码更重要

但当时对“类设计”其实没有太深理解。

三、第二次作业——多货舱管理系统

  1. 题目变化

第二次作业相比第一次变化很大,主要增加:

多货舱系统
每个货舱有容量限制
货物必须指定舱位
排序后再装载
每个货舱独立统计重量
整体航班重量统计

刚看到题目的时候其实是有点复杂的。

  1. 结构开始变乱

这一阶段最大的问题是:

代码开始明显变复杂,但结构没有同步优化

我最开始的设计是:

Flight类越来越大
货舱判断用字符串if
排序逻辑写在Flight里面
装载逻辑和输出混在一起

写到后面的时候,自己已经很难快速定位代码位置。

  1. 最大Bug:case1 / case4

这两个测试点一直不过,是最难受的一次调试经历。

表现是:

明明有些货物应该失败
但结果还是算进去了
总重量明显偏大

我最开始一直在检查输出格式,但一直找不到问题。

后来我加了调试输出:

System.out.println(currentWeight);

才发现问题核心是:

装载失败时重量仍然被加了

错误代码类似:

currentWeight += cargoWeight;

但是没有判断是否装载成功。

修复方式:
if(currentWeight + cargoWeight <= maxWeight){
cargos.add(cargo);
currentWeight += cargoWeight;
}

这个Bug让我第一次真正理解:

成功/失败状态必须严格分开,否则数据一定会错。

  1. 货舱查找写死问题

最开始代码是:

if(compartment.equals("前舱"))

问题是:

不可扩展
新货舱必须改代码

后来改成遍历:

for(CargoCompartment c : list)
5. 对类的初步理解

这一阶段开始意识到:

Cargo只应该表示货物
CargoCompartment只负责货舱
Flight不应该什么都做

但当时还没有完全拆干净。

6.复杂度

屏幕截图 2026-05-18 210834

7.类图
image

  1. 小结

第二次作业最大的感受是:

Bug不是一个点的问题,而是结构问题导致的连锁错误。

四、第三次作业——航空配平计算系统

  1. 题目变化

第三次作业直接升级为:

旅客系统
行李系统
货舱系统
力矩计算
重心计算
CG安全判断

整体已经接近真实航空计算模型。

  1. 最大难点:公式

核心计算其实不复杂,但非常容易写错。

我最开始写错:

cg = totalWeight / totalMoment;

结果全部错误。

后来才发现应该是:

cg = totalMoment / totalWeight;

这个Bug影响非常大,导致整个输出都是错的。

  1. 冒泡排序问题

由于不能用sort,我手写冒泡排序。

最开始写成:

for(int j=0;j<n;j++)

导致越界。

后来修正为:

for(int j=0;j<n-1-i;j++)
4. Passenger与Luggage问题

刚开始我写成:

Passenger p = new Passenger();
p.setLuggage(l);

但题目要求:

Luggage必须在Passenger内部创建

后来改成:

this.luggage = new Luggage(weight);
5. 输入校验问题

一开始只是打印错误:

System.out.println("错误");

但程序继续运行。

后来改为:

System.exit(0);

6.复杂度

屏幕截图 2026-05-18 211129

7.类图
image

  1. 小结

第三次作业让我感觉已经不只是“写代码”,而是在写一个小系统。

五、三次作业综合Bug总结(重点)

  1. 最常见问题类型
    (1)逻辑错误
    重量加错位置
    状态判断不清
    成功失败混用
    (2)Java基础问题
    Scanner换行问题
    String比较用错
    HashMap key问题
    (3)算法问题
    排序方向错误
    冒泡排序边界错误
    (4)设计问题
    Flight类过大
    职责不清
    后期难维护
  2. 最影响我调试的几个Bug
    ✔ case1 / case4错误(最久)

本质问题:

失败状态没有阻止数据更新
✔ CG公式写反(第三次最致命)

导致整个结果错误。

✔ Scanner输入问题(第一阶段)

导致输入完全错乱。

六、整体成长总结

这三次作业做下来,我最大的变化不是“会写更多代码”,而是:

开始意识到代码结构的重要性
开始在写代码前稍微想一下类怎么拆
开始知道Bug不是写错一行,而是设计问题
开始习惯边写边调试

但说实话,现在也还没有完全掌握:

设计模式
很规范的类拆分方式
更复杂的工程结构

很多时候还是:

先写出来,再慢慢改

不过相比一开始直接乱写,已经好很多了。

七、总结

整体来说,这三次作业对我来说不是“完成任务”,更像是一个逐步适应复杂程序结构的过程。

从最开始:

一个Main写全部

到后来:

开始拆类
开始考虑职责
开始调试结构问题

虽然过程很痛苦,尤其是case不过的时候,但确实慢慢理解了:

写代码不只是“实现功能”,更重要的是“让代码能被改”。

posted @ 2026-05-18 21:24  atp6  阅读(5)  评论(0)    收藏  举报