在使用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;
}
{ },避免因縮進誤導導致邏輯錯誤。public Flight findFlight(String num) {
return flightList.stream()
.filter(f -> f.getFlightnum().equals(num))
.findFirst()
.orElse(null);
}
這是一個典型的「省略大括號導致的控制流錯誤」。初學者常以為縮進決定代碼塊歸屬,實際上Java僅以大括號界定作用域。養成強制加括號的習慣,能有效杜絕此類低級錯誤。