我需要根据匹配删除数组的元素。 这是我删除事件的方法。
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错误
答案 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;
}
这里我们检查类的正确实例,然后检查它们的属性是否相等。