Java 从数组中删除元素

Java 从数组中删除元素,java,arrays,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++) {

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

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--;
        }
    }
什么也没发生。我的数组中有一个包含这些值的元素,但它不会将该元素更改为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错误

您的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;
}

您重写的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);
        }
    }

在本例中,您正在比较两个实例,如果
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;
}

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

看起来
事件中的
equals
方法已损坏。发布其实现以获得进一步的帮助。是否可以发布事件的重写的
equals()
函数?可能您的数组长于5?尝试使用数组长度的变量。此外
events
numEvents
是否在范围内?请确保您的equals正在检查所有属性是否相等,如果相等,则返回true。尚未看到您的
equals
方法的实现,但我只能认为问题在于您正在使用
=
而不是
equals
或发送错误的数据以从数组中删除元素。Java中没有
bool
数据类型。它不应该是
this.activity.equals(givenObject.activity)
基于他的参数吗?@Jordan匆忙地这样做了。我希望它没有被误解,因为它必须比较字符串。顺便说一句,您没有重写
equals
方法,而是重载它。@Luigimendoza再次感谢您
activity==e.activity
这不是您比较
String
s的方式:
@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;
}