从阵列中删除选定的对象

时间:2018-01-16 15:01:22

标签: java arrays loops object for-loop

我创建了一个对象数组(表示飞行的对象), 并且我试图创建一种方法来从该数组中删除特定对象,而不改变它的长度。 我写了以下方法:

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;当给定一个添加到数组中的对象时。

1 个答案:

答案 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,以避免无意中的内存泄漏。