我创建了一个对象数组(表示飞行的对象), 并且我试图创建一种方法来从该数组中删除特定对象,而不改变它的长度。 我写了以下方法:
public boolean removeFlight (Flight f) {
for (int i = 0 ; i < _noOfFlights ; i++) {
if (_flightsSchedule[i].equals(f)) {
_flightsSchedule[i] = _flightsSchedule[(i+1)];
_noOfFlights--;
return true;
}
}
return false;
}
_noOfFlights表示当前数组中的对象数。 出于某种原因,它会返回&#34; false&#34;当给定一个添加到数组中的对象时。
答案 0 :(得分:0)
你需要注意不要改变脚下的地面。你也不想在循环中间返回,否则你不会正确地移动所有元素。
你可以这样做:
public boolean removeFlight (Flight f) {
boolean found = false;
for (int i = 0 ; i < _flightsSchedule.length; i++) {
if (f.equals(_flightsSchedule[i])) {
found = true;
} else if (found) {
_flightsSchedule[i - 1] = _flightsSchedule[i];
}
}
if (found) {
_noOfFlights--;
_flightsSchedule[_flightsSchedule.length - 1] = null;
}
return found;
}
另请注意,我已将最后一个元素设置为null
,以避免无意中的内存泄漏。