【问题标题】:Removing a selected object from an array [duplicate]从数组中删除选定的对象[重复]
【发布时间】:2018-01-16 15:01:22
【问题描述】:

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

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 表示当前在数组中的对象数。 由于某种原因,当给定一个添加到数组中的对象时,它会返回“false”。

【问题讨论】:

  • 覆盖Flight中的等于
  • 您的迭代变量正在增加,而条件边界正在减少......小心
  • 您需要移动要删除的元素之后的所有元素,而不仅仅是下一个元素。
  • 如果Flight 是数组中的最后一个对象,您的(i+1) 将导致绑定异常。
  • 对您的代码的一些说明: - 您应该将{ 写在同一行或新行上,但要选择一个并坚持下去。 - 每个变量名和字段名(final 原语除外)都应以小写字母开头。 - 请多加注意w.r.t。你的缩进。

标签: java arrays loops object for-loop


【解决方案1】:

您需要注意不要改变脚下的地面。您也不想在循环中间返回,否则您将无法正确移动所有元素。

你可以这样做:

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 以避免意外的内存泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2019-12-03
    • 2017-04-10
    • 2013-04-24
    • 2016-03-12
    相关资源
    最近更新 更多