Obecnie wykonuję zadanie, które zajmuje się klasą ArrayList. w pewnym momencie muszę sprawdzić identyfikator instruktora i upewnić się, że instruktor nie jest dodany dwukrotnie do ArrayList, więc zrobiłem pętlę for, aby przejść przez wszystkie zarejestrowane identyfikatory i uzyskać identyfikator i sprawdzić jeśli już istnieje

Problem polega na tym, że gdy używam metody „.size ()” w pętli, JVM zgłasza wyjątek NullPointerException i nie wiem dlaczego.

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

Muszę przeczytać to:

\\ imię i nazwisko - identyfikator - data urodzenia - płeć - stopień - specjalność - miasto - dostępność

Amanda Smith, 102020, 320101200000, M, doktor, Inżynieria oprogramowania, NewYork, prawda

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

To jest kod:

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
0
NJ_GMD 4 kwiecień 2020, 03:22

4 odpowiedzi

Najlepsza odpowiedź

Problem polega na tym, że lista członków nie istnieje, gdy wywołujesz na niej .size ()

Zamiast

ArrayList<UniversityMember> membersList;

Musisz go zainicjalizować

ArrayList<UniversityMember> membersList = new ArrayList<UniversityMember>();
1
JoeChris 4 kwiecień 2020, 00:33

Musisz zainicjować ArrayList. Tak jak ta ArrayList MembersList = new ArrayList (); Po tym, w pierwszym size () zwraca 0, a nie null. Pamiętaj, że cała struktura danych musi zostać zainicjowana w Javie.

1
Wallace Vinicius 4 kwiecień 2020, 01:31

Nvm Dowiedziałem się, że nie zainicjowałem mojej tablicy (╥ω╥) Zachowam pytanie, aby inni byli ostrożni

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

Kod po naprawieniu:

    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
0
Hemant 4 kwiecień 2020, 07:21

Nie dodałeś niczego do listy członków, a następnie zapytałeś o rozmiar czegoś, co nie ma w tym nic. Przykład tego, co się dzieje

String str;

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

Również musisz zadeklarować listę tablic w ten sposób

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

Nie zapomnij również zaimportować klasy ArrayList

import java.util.ArrayList;
0
DebugDucker 4 kwiecień 2020, 00:31