第一次blog pta01-03 航班题

----PTA01 类图 来源豆包

----PTA02 类图 来源豆包

----PTA03 类图 来源豆包
前三次总结 知识点 题量 难度
PTA01
- 面向对象基础:类与对象、属性封装、构造方法、成员方法定义
- 集合基础: ArrayList 的创建、遍历、元素添加与统计
- 业务逻辑实现:总重量累加、单层超载判断
- 输入输出:控制台多数据读取、格式化输出
- 数值处理:浮点数运算、简单条件判断
- 初步设计思想:数据类与业务逻辑的基本分离
难度一般
PTA02 - 面向对象进阶: 组合关系(货舱与位置)、聚合关系(货舱与货物)的实现与区分
单一职责原则(SRP):类职责严格拆分 - 容器嵌套使用: List 中嵌套 List ,实现航班-货舱-货物的层级管理
多层集合遍历、统计总重量 - 排序算法;自定义稳定排序(按重量降序,同重量保持输入顺序)
手写排序逻辑 - 双层校验逻辑:- 单货舱最大载重校验
航班整体最大起飞重量、最大业载双重校验 - 输入校验:整数/浮点数范围校验、非法数据拦截
- 格式化输出:多条件状态输出、浮点数保留1位小数
- 字符串匹配:按货舱ID查找并装载货物
中等
PTA03 - 继承前序所有知识点(PTA01+PTA02)
- 精细化面向对象设计:- 组合关系强化:旅客与行李的强依赖管理(内部创建、外部不可修改)
无继承、无接口、无多态的编码规范 - 手写排序算法:- 冒泡排序实现货物重量降序(禁用 Collections.sort() 和Lambda)
- 全局输入校验体系:- 负数拦截、数值范围校验、非法输入直接终止程序
- 航空力学核心计算:- 旅客总重量与力矩计算
货舱力矩计算(前/后舱不同力臂)
全机总重量、总力矩求和
实际重心CG计算公式
%MAC重心百分比换算与安全区间判定 - 纯工具类解耦设计:- 无成员变量的计算工具类,仅通过传参完成业务计算
- 异常业务处理:货舱容量不足预警、数据合法性校验
- 结构化报表输出:航空标准载重平衡舱单的分层格式输出
难
设计与分析
PTA01 - 分层结构- 实体层: Flight 航班类、 Cargo 货物类
业务逻辑层: LoadManifest 舱单管理类
工具层: CargoSorter 货物排序工具类
入口层: Main 主类负责输入调用 - 职责划分- Flight :只存储航班名称、最大载重、关联舱单对象,仅提供 get 方法封装数据
Cargo :纯数据实体,保存货物名称、重量,私有化属性提供取值方法
LoadManifest :依赖航班对象,管理货物集合,实现货物添加、重量统计、超载判断、结果打印
CargoSorter :静态工具类,专门实现货物重量降序选择排序
PTA02 - 类结构升级
新增 Position 位置类、 CargoCompartment 货舱类,重构航班与舱单类,实现多货舱分布式装载 - 核心关系设计- 组合关系: CargoCompartment 内部自动创建 Position 位置对象,货舱销毁位置随之销毁
聚合关系: Cargo 货物独立存在,仅被货舱引用装载
关联关系: Flight 关联舱单,舱单统一管理所有货舱与所有货物 - 核心业务逻辑
- 录入多货舱信息,存入舱单集合
- 录入货物并指定目标货舱
- 工具类统一按重量降序排序货物
- 遍历货物自动匹配目标货舱,判断单货舱是否超载
- 分别输出每个货舱装载状态
- 统计全局货物重量,双重判断:最大起飞重量、最大业载重量
- 职责严格遵循单一职责- 位置类:只管理行列位置
货物类:只存储货物属性
货舱类:只管理自身载重、货物、自身超载判断
航班类:只存储航班限额数据
排序工具类:只负责排序
舱单类:统筹调度、匹配货舱、整体业务调度
PTA03 - 全体系类拆分
在第二题基础上新增旅客行李体系、全局校验体系、航空力学计算体系- 旅客模块: Luggage 行李类 + Passenger 旅客类(强组合关系)
校验模块: InputValidator 全局输入校验工具类
专业计算模块: WeightBalanceCalculator 纯力矩重心计算工具类
原有货舱、货物、航班结构全部保留复用 - 核心强制规范实现
- 旅客与行李组合绑定:旅客构造方法内部new行李对象,外部无法创建修改行李
- 禁用API排序,手写冒泡排序完成货物排序
- 计算类无任何业务成员变量,只通过传参完成纯数学计算
- 所有输入数据统一校验,负数、越界数据直接终止程序
- 核心航空业务流程
- 校验读取前舱、后舱结构与载重数据
- 录入旅客人数+每人行李重量,自动计算单人标准体重+行李总重
- 区分录入前舱、后舱货物
- 前置预判货舱容量是否充足,不足直接警告终止装载
- 合法货物正式装载入库
- 调用力学工具类:计算旅客力矩、货舱力矩、全机总重、总力矩、实际重心、重心百分比
- 根据重心区间判定飞行安全等级
- 按航空标准格式输出完整载重平衡舱单
踩坑心得
PTA 01 使用冒泡排序就会错误 使用选择排序就没错误
构建使用flight类的 忘记使用封装性,扣了40分
Scanner换行符读取冲突
混用 nextInt() 与 nextLine() ,读取完数字后残留换行符,导致货物名称读取为空字符串,程序录入数据错乱。一开始只简单加一行 nextLine() 吃掉换行,写法随意,在多组数据输入时依旧报错。
心得:数字读取后统一清空缓冲区,优先整行读取再拆分数据,严格规范输入顺序,避免混合使用不同录入方法。
不知道错在哪里 无法直接看到个别情况的输出 一直显示答案错误 可能是格式出错
代码书写规范性不足
变量命名语义模糊、注释缺失、代码缩进混乱、资源关闭不及时,Scanner等流对象在异常流程下无法正常关闭,存在资源浪费问题。
做题很容易凭自己想法写逻辑,不仔细对照题目要求,经常把排序规则、计算公式写错,白白丢分。
改进建议
- 面向对象统一规范
- 所有实体类属性全部私有,只提供getter,禁止setter随意篡改数据
- 业务行为尽量放入对应实体,通用功能全部抽成静态工具类
- 严格遵循:实体类存数据、工具类做计算、业务类做流程、主类只做调用
- 输入输出统一优化
- 所有数值读取统一走 InputValidator ,拒绝零散判断
- 所有控制台输出封装成打印工具类,统一格式、统一小数保留
- 统一处理字符串分割,兼容多空格、首尾空格输入
- 算法统一优化
- 全部排序统一规范:重量降序 > 录入顺序升序
- 集合遍历优先增强for循环,查找逻辑封装独立方法
- 重量求和、力矩求和统一封装统计方法,减少重复代码
- 容错与健壮性提升
- 增加空集合判断:无货物、无旅客、无货舱不报错
- 增加自定义提示文案,代替生硬系统提示
- 浮点运算全部统一精度处理,杜绝0.1+0.2精度bug
- 课程设计加分优化点(写报告可用)
- 加入代码注释:类注释、方法功能注释、核心公式注释
- 绘制简易类关系图:组合、聚合、依赖关系标注
- 增加版本迭代说明,清晰写出三次迭代新增功能
- 增加异常处理机制,提升程序稳定性
- 对核心航空配平公式单独封装,便于修改参数调试
总结 - 开发前先绘制简易类图,划分好每个类的职责,严格遵守单一职责原则,确定好对象之间组合、聚合、依赖关系后,再动手编写代码。
- 所有输入数据统一使用工具类完成校验,从源头杜绝非法数据进入业务逻辑。
- 算法编写完成后,使用多组测试用例反复验证,确保完全符合题目排序、判断、计算要求。
- 坚持模块化拆分代码,杜绝巨型主方法,做到功能独立、方法精简。
- 优先考虑代码拓展性,固定参数常量化、可变数据属性化,减少硬编码写法。
- 完成基础功能后,优先测试边界用例、异常用例,提升程序整体稳定性与完整性。
浙公网安备 33010602011771号