如何建立null知道链接

时间:2018-10-20 20:05:58

标签: java

我有下一个方法

public Event findEvent(Date date){
        for (int i = 0; i < events.length ; i++) {
            if(events[i].getDate() == date){
                return events[i];
            }
        }
        return null;
    }

它返回我来自数组中对象的链接。 然后我要删除此元素,但不知道如何更正它的代码。

public void deleteEvent(Date date){
        findEvent(date) = null; //??????????? 
        Event[] list = new Event[events.length - 1];
        int j = 0;
        for (int i = 0; i < events.length ; i++) {
            if(events[i] != null){
                list[j] = events[i];
                j++;
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

您不能将值分配给方法返回值。

是的,在逻辑上,您希望“将找到的日期设置为null”,但实际上需要在循环中完成

而不是将其设置为null,您可以跳过其索引而不将其复制到新列表中

public void deleteEvent(Date date){
    Event[] list = new Event[events.length - 1];
    int j = 0;
    for (int i = 0; i < events.length ; i++) {
        if(events[i] != null){
            if (events[i].getDate().equals(date)) continue; // skip the event to delete 
            list[j] = events[i];
            j++;
        }
    }
    events = list;  // reassign the new events 
}

注意:如果多个事件发生在同一日期,则此方法不起作用


或者,使find方法返回索引

public int findEvent(Date date){
    for (int i = 0; i < events.length ; i++) {
        if(events[i].getDate().equals(date)){
            return i;
        }
    }
    return -1;
}

您可以从中删除

int indexToRemove = findEvent(date);
if (indexToRemove > 0) {
    events[indexToRemove] = null;
    // copy these events to new list to remove nulls
}

如果不需要使用数组,则应使用Arraylist并将Event对象设置为Comparable类型

答案 1 :(得分:0)

使用发现的事件进行比较,如果该日期未发现任何事件,则仅返回而没有任何更改。

public void deleteEvent(Date date){
    Event foundEvent = findEvent(date);

    if (foundEvent == null) {
        return;
    }

    Event[] list = new Event[events.length - 1];
    int j = 0;
    for (int i = 0; i < events.length ; i++) {
        if(!events[i].getDate().equals(foundEvent.getDate())) {
            list[j] = events[I];
            j++;
        }
    }
    events = list;
}