JAVA NullPointerException:检查对象是否存在于数组中? [重复]

问题描述 投票:0回答:3

我有这种方法来检查数组中是否存在具有名字和姓氏的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...");
         }
java arrays exception nullpointerexception null
3个回答
1
投票

因为您是数组中的访问对象,并且它为空值,所以可以先检查它

 if(this.memberList[i] != null && this.memberList[i].getFName().equals(firstName) &&
                this.memberList[i].getLName().equals(lastName)) {
            return true;
        }

0
投票

首先,NullPointerException可以说是Java中最可能,最重要和最经常抛出的异常。有关更多详细信息,请参见What is a NullPointerException, and how do I fix it?

您的错误在此行:

if(this.memberList[i].getFName().equals(firstName) &&

这里,如果memberList[i]中的对象不存在(为null),则抛出此异常以表示您访问了不存在的对象。在检查姓名(预先确定)之前,您必须检查该人本身是否存在。如果根本没有人在数组的索引上,那么您必须continue循环,然后继续查找。


-2
投票

虽然当前方法中出现的[[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; }
© www.soinside.com 2019 - 2024. All rights reserved.