首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java集合查找Bug:findFlight方法導致航班重複添加失敗的解決方案

     編輯:程式設計綜合問答

問題現象

在使用addFlight方法向flightList添加航班對象時,第一個元素能正常添加,但從第二個開始,即使航班號(flightnum)完全不同,系統仍持續拋出提示:「Cannot be added to the schedule, because there is another flight with the same flight number.」。

代碼分析

public Flight findFlight(String num) {
    for (int i=0; i<flightList.size(); i++)
        if (flightList.get(i).getFlightnum().equals(num)) {
            return flightList.get(i);
        }
    return null;
}

public boolean addFlight(Flight flight1) {
    Flight findFlightStatus = this.findFlight(flight1.getFlightnum());
    if (findFlightStatus == null) {
        flightList.add(flight1);
        return true;
    } else
        System.out.println("Cannot be added to the schedule, because there is another flight with the same flight number.");
    return false;
}

根本原因

findFlight方法缺少大括號,導致邏輯錯誤。 在Java中,if語句若不加大括號,僅控制緊跟其後的單條語句。原代碼中:

for (int i=0; i<flightList.size(); i++)
    if (flightList.get(i).getFlightnum().equals(num)) {
        return flightList.get(i);
    }
return null;

編譯器實際解析為:

for (int i=0; i<flightList.size(); i++)
    if (flightList.get(i).getFlightnum().equals(num)) {
        return flightList.get(i);
    }
return null; // 這行在循環外部!

但由於return null未被包含在循環內,導致循環只執行一次(檢查第一個元素後直接返回null),造成後續元素永遠無法被正確查找,進而誤判為重複。

修正方案

為if語句添加大括號,明確控制流程:

public Flight findFlight(String num) {
    for (int i = 0; i < flightList.size(); i++) {
        if (flightList.get(i).getFlightnum().equals(num)) {
            return flightList.get(i);
        }
    }
    return null;
}

最佳實踐建議

  • 永遠使用大括號:即使單行語句,也建議加上{ },避免因縮進誤導導致邏輯錯誤。
  • 使用增強型for循環或Stream API簡化代碼:
    public Flight findFlight(String num) {
        return flightList.stream()
            .filter(f -> f.getFlightnum().equals(num))
            .findFirst()
            .orElse(null);
    }
    
  • 單元測試覆蓋邊界情況:空列表、首尾元素匹配、不存在元素等。

總結

這是一個典型的「省略大括號導致的控制流錯誤」。初學者常以為縮進決定代碼塊歸屬,實際上Java僅以大括號界定作用域。養成強制加括號的習慣,能有效杜絕此類低級錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved