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