Java航班管理系统实现:Test测试类如何从Flight类获取日期属性
问题解决与代码优化建议
一、无法获取Flight日期属性的原因及正确实现
你写的测试类存在几个直接导致无法正常获取日期属性的问题:
- 类名拼写错误:代码里写的
Flights a = new Flight(...),类名多了个s,编译就会失败 - Flight的
toString方法存在运算符优先级错误:三目运算符没有加括号,导致字符串拼接逻辑异常,日期属性不会正常输出 - 使用了已过时的
Date带字符串构造方法,容易出现日期解析异常 - 创建的Flight实例没有加入Airport的全局航班集合,后续查询逻辑找不到对应数据
正确的测试类实现示例
import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class TestClass { public static void main(String[] args) { // 用Java8+的LocalDate替代过时的Date,避免解析问题 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy"); LocalDate date1 = LocalDate.parse("11/12/2020", formatter); // 正确创建Flight实例(注意类名不要写错) Flight flight1 = new Flight(1, date1, 50, 5, "沙特航空", "免费餐食"); // 添加飞行员、乘客测试逻辑 Pilot pilot1 = new Pilot("P001", "张三", "资深机长", "民航客运"); flight1.setPilot(pilot1); Passenger passenger1 = new Passenger("E12345678", "李四", "A型", "成人", "138XXXX1234"); flight1.addPassenger(passenger1); // 加入Airport全局集合 Airport airport = new Airport(); airport.addFlight(flight1); // 测试获取日期属性 System.out.println("航班1的日期:" + flight1.getDate()); // 测试业务方法 System.out.println("===== 航班列表 ====="); airport.display(); System.out.println("===== 当日平均载客量 ====="); airport.averageNumberOfPassengersPerFlight(date1); // 测试保存文件 airport.saveInTextFile("./flight_data.txt"); } }
同时要修改Flight类的toString方法,给三目运算加括号:
@Override public String toString() { return "编号: " + number + ", 飞行员: " + (pilot != null ? pilot.toString() : "未分配") + ", 日期: " + date + ", 航司: " + airline + ", 餐食: " + food + ", 载客数: " + passengers.size(); }
二、现有代码可优化点
- 日期类型替换:把所有
java.util.Date替换为java.time.LocalDate,该类是Java8之后推出的时间类,线程安全、API易用,不存在过时方法的坑 - 属性封装优化:现在所有类的属性都是包访问权限,不符合面向对象封装原则,全部改为
private,仅通过get/set方法访问 - 职责拆分调整:Flight类中的
pilotExistance、passengerExistance属于全局校验逻辑,不应放在Flight类中,建议移到Airport类统一管理,Flight仅负责单航班自身的增删乘客等业务 - 唯一性校验效率优化:当前判断航班、飞行员、乘客重复都是遍历列表,数据量大时性能差,可在Airport中新增对应Map做缓存:比如
Map<LocalDate, Set<Integer>> dateFlightNoMap存储日期对应的航班号集合,判断重复只需O(1)时间复杂度 - 需求合规调整:当前未满足需求中「乘客需有1个属性与飞行员共通」的要求,可给两类都加比如「联系方式」「所属航司」这类共通属性
- 拼写错误修复:修复代码中多处拼写错误:
experiance改为experience、agecatagory改为ageCategory、flgit改为flight等,提升代码可读性 - 流操作优化:
saveInTextFile方法改用try-with-resources语法自动关闭流,避免手动关闭时出现异常导致资源泄漏 - 静态集合调整:Airport的
flights集合设为static不合理,若要创建多个Airport实例会出现数据冲突,建议改为非静态属性,Airport用单例模式实现全局唯一实例 - 除法精度优化:计算平均载客量时用int除法会丢失小数精度,改为
average = (double) passengersCount / flightsCount保留小数
内容的提问来源于stack exchange,提问作者HoLee
相关产品推荐
相关产品推荐

