-2

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

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。

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

这是我的equals方法:

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 错误

4

3 回答 3

0

如果event[i]Event实例,则比较两个实例,然后比较方式与字符串比较不同。

你需要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;
}

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

于 2013-09-11T17:44:34.840 回答
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;
}
于 2013-09-11T17:33:19.660 回答
0

您覆盖的 equal 方法应该如下所示

   @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);
        }
    }
于 2013-09-11T17:35:10.667 回答