-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

あなたの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 に答える
0

インスタンスがある場合、これで2つのインスタンスを比較し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 に答える