从数组中删除元素

时间:2013-09-11 17:25:20

标签: java arrays

我需要根据匹配删除数组的元素。 这是我删除事件的方法。

public boolean removeEvent(int year, int month, int day, int start, int end, String activity)
    {
    Event newEvent = new Event(year, month, day, start, end, activity);
    for (int i = 0; i < 5; i++)
    {   
        if (newEvent.equals(events[i]))
        {
            events[i] = null;
            newEvent = null;
            numEvents--;
        }
    }

当我尝试

calendarTest1.removeEvent(2000, 1, 1, 1, 1, "Cal Test 1");
没有任何反应。我的数组中有一个包含这些值的元素,但它不会将该元素更改为null。

这是作业,所以我真的不想被告知如何做,只是为什么这不起作用。谢谢。

这是我的等于方法:

public boolean equals(Object obj){

    Event someEvent = (Event) obj;
        if(
        this.date == someEvent.date
            &&
        this.start == someEvent.start
            &&
        this.end == someEvent.end
            &&
        this.activity.equals(someEvent.activity))

    if(obj == null) 
        return false;
      if(obj instanceof Event)
        return true;
      else
      {
      return false;
      }
}

我尝试了很多不同的东西,但我仍然得到NullPointerException错误

3 个答案:

答案 0 :(得分:0)

是你的equals方法检查所有属性吗?

public boolean equals(Object o){
  if(o == null) return false;

  if(o instanceOf Event){
    Event givenObject = (Event) o;
        if(this.year == givenObject.year)
          if(this.month == givenObject.month)
              .....
                  .....
                     if(this.activity.equals(givenObject.activity)){
                        return true;
                 }
   }
   return false;
}

答案 1 :(得分:0)

你的覆盖等于方法应该是下面的

   @Override
        public boolean equals(Object o) {

            // If the object is compared with itself then return true  
            if (o == this) {
                return true;
            }

            /* Check if o is an instance of Event or not
              "null instanceof [type]" also returns false */
            if (!(o instanceof Event)) {
                return false;
            }

            // typecast o to Event so that we can compare data members 
            Event e = (Event) o;

            // Compare the data members and return accordingly 
            return year==e.year && month== e.month && day==e.day && start == e.start && end == e.end && activity.equals(e.activity);
        }
    }

答案 2 :(得分:0)

如果event[i]Event个实例,那么您正在比较两个实例,那么比较方式与字符串比较不同。

您需要在类ex:

中覆盖equals方法
@Override
public boolean equals(Object ob) {
    if (ob == null)
        return false;
    if (ob instanceof Event) {
         Event e = (Event)ob;
         return this.someStringValue.equals(e.someStringValueItHas); // compare all values you want like this
    }
        return false;
}

这里我们检查类的正确实例,然后检查它们的属性是否相等。