我有这种方法来检查数组中是否存在具有名字和姓氏的Member对象。
public boolean checkMemberExists(String firstName, String lastName) {
System.out.println("f: " + firstName + ", l: " + lastName);
for(int i = 0; i < this.memberList.length; i++) {
if(this.memberList[i].getFName().equals(firstName) &&
this.memberList[i].getLName().equals(lastName)) {
return true;
} else {
System.out.println("not found count " + i);
}
}
System.out.println("False....");
return false;
}
如果if语句中的firstName和lastName匹配,它会返回没有错误的罚款,如果对象不存在,BUT会给我以下错误:
线程“主”中的异常java.lang.NullPointerException,位于MemberCollection.checkMemberExists。
它应该返回false而不是引发异常? Java的新手。
这是我使用此方法的方式:
if(membersCollection.checkMemberExists(fName, lName)) {
System.out.println( ">> " + fName + " " + lName + " has already registered.");
} else {
// register
System.out.println("Registering user...");
}
因为您是数组中的访问对象,并且它为空值,所以可以先检查它
if(this.memberList[i] != null && this.memberList[i].getFName().equals(firstName) &&
this.memberList[i].getLName().equals(lastName)) {
return true;
}
首先,NullPointerException
可以说是Java中最可能,最重要和最经常抛出的异常。有关更多详细信息,请参见What is a NullPointerException, and how do I fix it?。
您的错误在此行:
if(this.memberList[i].getFName().equals(firstName) &&
这里,如果memberList[i]
中的对象不存在(为null
),则抛出此异常以表示您访问了不存在的对象。在检查姓名(预先确定)之前,您必须检查该人本身是否存在。如果根本没有人在数组的索引上,那么您必须continue
循环,然后继续查找。
虽然当前方法中出现的[[does的所有逻辑都是正确的,但您没有考虑没有成员的极端情况,memberList
为空。一种选择是首先检查非null memberList
,然后才进入循环。
public boolean checkMemberExists(String firstName, String lastName) {
System.out.println("f: " + firstName + ", l: " + lastName);
boolean result = false;
if (this.memberList != null) {
for(int i=0; i < this.memberList.length; i++) {
if (this.memberList[i].getFName().equals(firstName) &&
this.memberList[i].getLName().equals(lastName)) {
result = true;
break;
}
else {
System.out.println("not found count " + i);
}
}
}
System.out.println("False....");
return result;
}