You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java航班管理系统实现:Test测试类如何从Flight类获取日期属性

问题解决与代码优化建议

一、无法获取Flight日期属性的原因及正确实现

你写的测试类存在几个直接导致无法正常获取日期属性的问题:

  1. 类名拼写错误:代码里写的Flights a = new Flight(...),类名多了个s,编译就会失败
  2. Flight的toString方法存在运算符优先级错误:三目运算符没有加括号,导致字符串拼接逻辑异常,日期属性不会正常输出
  3. 使用了已过时的Date带字符串构造方法,容易出现日期解析异常
  4. 创建的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:06:03