我有下一个方法
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++;
}
}
}
答案 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;
}