在 Arraylist class 中使用 .size() 时出现 NullPointerException

NullPointerException when using .size() in an Arraylist class

目前,我正在做一个处理 ArrayList class 的作业。 在某些时候,我需要检查讲师的 id 并确保讲师没有被添加到 ArrayList 中两次,所以我做了一个 for 循环来遍历所有已注册的 id 并获取 id 并检查如果它已经存在

问题是当我在循环中使用方法“.size()”时,JVM 抛出 NullPointerException 我不知道为什么。

============================================= =============================

我需要看的是这个:

\\姓名-身份证号-出生日期-性别-学位-专业-城市-可用性

Amanda Smith,102020,320101200000,硕士,博士,软件工程,纽约,真实

============================================= ==========================

这是代码:

public static void main(String[] args) {

    /* NOTE: I HAVE A CLASS CALLED "UniversityMember" THAT IS A SUPERCLASS FOR "Instructor" CLASS */

    //declare what I need   
    ArrayList<UniversityMember> membersList;
    Scanner read = new Scanner("inputFile.txt");//the file contains the text above

    //First: Split the line everytime the sign ", " shows
    String[] line = read.nextLine().split(", ");

    //Second: Assign each valuse to its correspondeding variable
    String name = line[0];
    String id = line[1];
    long date = Long.parseLong(line[2]);
    Date birthDate = new Date(date);
    char gender = line[3].charAt(0);
    String degree = line[4];
    String specialization = line[5];
    String address = line[6];
    boolean availability = Boolean.parseBoolean(line[7]);

    //check if the Id is registered already
    for (int i = 0; i < membersList.size(); i++) { //ERROR OCCURE
        if (membersList.get(i) == null) {
            break;
        }

        if (membersList.get(i).id.equals(id)) {
            System.out.println("The instructor is registered already, the ID is found in the system.");
            System.exit(0);
        }
    }

    //add and make a new object for the constructor
    membersList.add(new Instructor(name, id, birthDate, gender, degree, specialization, address, availability));
    System.out.println("The instructor is successfully added.");

}//end main

您还没有向 membersList 添加任何内容,然后询问其中没有任何内容的内容的大小。 发生了什么事的例子

String str;

for(int i = 0; i < str.length(); i++){
    System.out.println("hey");
}

你还需要像这样声明数组列表

ArrayList<Method name> membersList = new ArrayList<Method name>();

也不要忘记导入 ArrayList class

import java.util.ArrayList;

问题是当您调用 .size() 时 membersList 不存在

而不是

ArrayList<UniversityMember> membersList;

你需要初始化它

ArrayList<UniversityMember> membersList = new ArrayList<UniversityMember>();

nvm 我发现我的数组还没有初始化( ╥ω╥ ) 我会把问题留给其他人小心

============================================= =====

修复后的代码:

    public static void main(String[] args) {

    /* NOTE: I HAVE A CLASS CALLED "UniversityMember" THAT IS A SUPERCLASS FOR "Instructor" CLASS */

    //declare what I need   
    ArrayList<UniversityMember> membersList;
    Scanner read = new Scanner("inputFile.txt");//the file contains the text above

    /* ===== FIXING THE ERROR ======*/
     membersList = new ArrayList();

    //First: Split the line everytime the sign ", " shows
    String[] line = read.nextLine().split(", ");

    //Second: Assign each valuse to its correspondeding variable
    String name = line[0];
    String id = line[1];
    long date = Long.parseLong(line[2]);
    Date birthDate = new Date(date);
    char gender = line[3].charAt(0);
    String degree = line[4];
    String specialization = line[5];
    String address = line[6];
    boolean availability = Boolean.parseBoolean(line[7]);

    //check if the Id is registered already
    for (int i = 0; i < membersList.size(); i++) { 
        if (membersList.get(i) == null) {
            break;
        }

        if (membersList.get(i).id.equals(id)) {
            System.out.println("The instructor is registered already, the ID is found in the system.");
            System.exit(0);
        }
    }

    //add and make a new object for the constructor
    membersList.add(new Instructor(name, id, birthDate, gender, degree, specialization, address, availability));
    System.out.println("The instructor is successfully added.");

}//end main

您需要初始化ArrayList。 就像 ArrayList membersList = new ArrayList(); 之后,在第一个 size() returns 0 而不是 null。请记住,所有数据结构都必须在 java.

中初始化