Array null pointer exception error

50,252

Solution 1

As your code is currently written,

System.out.println(studentArray[0].getFirstName());

Will throw an NPE since you're never initializing the array.

private static students[] studentArray;

Just declares it, doesn't initialize it.

Maybe you should refactor your code as follows

private static ArrayList<students> studentArray = new ArrayList<students>();

// Inside the constructor or some method called before you access studentArray:
studentArray.add(stu1);
studentArray.add(stu2);
//...

// or, more concisely, since you're not using the temporary `students` variables:
studentArray.add(new students(65435, "Bob", "Ted"));
studentArray.add(new students(45546, "Guy", "Sid"));
//...

If you're committed to using an array and not a List,

private static students[] studentArray;

needs to be initialized with something like

private static students[] studentArray = new students[10];

and then you need to assign its elements

studentArray[0] = stu1;

or

studentArray[0] = new students(65435, "Bob", "Ted");

Solution 2

You should always create a object before trying to access it. You have declared a reference pointing to a array :

private static students[] studentArray;

but never assigned any object to the reference. Hence you get a NullPointerException.

Use this :

private static students[] studentArray = new students[size]; 

Above code will create a new object (array of students), pointed by a reference variable (studentArray). OR

You can use List or Set which are more efficient then array.

Share:
50,252
user2229592
Author by

user2229592

Updated on July 09, 2022

Comments

  • user2229592
    user2229592 almost 2 years

    I am continuing with my project for school and have seemed to encounter another error. So what is happening is basically I am receiving a null pointer exception even though the code looks fine. I believe something is wrong with my array, and even after hours of searching I can't seem to find the error. Once again, any help/solution would be greatly appreciated.

    import java.util.*;
    
    public class library {
    
    private static students stu1 = new students(65435, "Bob", "Ted");
    private static students stu2 = new students(45546, "Guy", "Sid");
    private static students stu3 = new students(78688, "Tim", "Cas");
    private static students stu4 = new students(45387, "Guy", "Jim");
    private static students stu5 = new students(12367, "Dom", "Lam");
    private static students stu6 = new students(45905, "Kid", "Loo");
    private static students stu7 = new students(65484, "Mut", "Hum");
    private static students stu8 = new students(34578, "Kim", "Hay");
    private static students stu9 = new students(20457, "Roy", "Boy");
    private static students stu0 = new students(15678, "Kil", "Bil");
    
    private static students[] studentArray;
    private static students[] stuArrayAlt;
    private static boolean firstArrayStu = true;
    
    // private static books bookName = new books("title",
    // "author","category","isbn", cost, rating out of 10);
    
    private static books book1 = new books(
            "Harry Potter and the Deathly Hallows", "JK Rowling", "fantasy",
            "9780739360385", 30.00, 9.0);
    private static books book2 = new books("Angels and Demons", "Dan Brown",
            "fiction", "9780828855495", 25.00, 8.5);
    private static books book3 = new books("The Hunger Games",
            "Suzanne Collins", "science fiction", "9780439023481", 20.00, 8.0);
    private static books book4 = new books("A Game of Thrones",
            "George R R Martin", "fantasy", "9780002245845", 54.50, 12.5);
    private static books book5 = new books("title2", "author2", "category2",
            "isbn2", 54.50, 12.5);
    private static books book6 = new books("title2", "author2", "category2",
            "isbn2", 54.50, 12.5);
    private static books book7 = new books("title2", "author2", "category2",
            "isbn2", 54.50, 12.5);
    private static books book8 = new books("title2", "author2", "category2",
            "isbn2", 54.50, 12.5);
    private static books book9 = new books("title2", "author2", "category2",
            "isbn2", 54.50, 12.5);
    private static books book0 = new books("title2", "author2", "category2",
            "isbn2", 54.50, 12.5);
    
    private static books[] bookArray;
    private static books[] bookArrayAlt;
    private static boolean firstArrayBook;
    
    private static int year1;
    private static int month1;
    private static int date1;
    
    public library() {
        bookArray = new books[] { book1, book2, book3, book4, book5, book6,
                book7, book8, book9, book0 };
        firstArrayBook = true;
    
        studentArray = new students[] { stu1, stu2, stu3, stu4, stu5, stu6,
                stu7, stu8, stu9, stu0 };
        firstArrayStu = true;
    }
    
    public static void main(String[] args) {
        // System.out.println(stu1.getStuNum() + " " + stu1.getFirstName() +
        // " "+ stu1.getLastName());
    
        // books[] bookReturn = stu1.insertBook(book1);
        // System.out.println(book1.getCheckInLibrary());
        // System.out.println(book1.getCheckInLibrary());
    
        // System.out.println(bookReturn[0].getName());
    
        // books[] bookReturn2 = stu1.insertBook(book2);
        // System.out.println(book2.getCheckInLibrary());
        // System.out.println(book2.getCheckInLibrary());
        // stu1.insertBook(book1);
    
        // checkOutBook(stu1,book1);
        // System.out.println(stu1);
        // stu1=null;
        // System.out.println(stu1);
    
        /*
         * stu1.lostBookFine(book1); System.out.println(stu1.getFineBalance());
         * stu1.lostBookFine(book2); System.out.println(stu1.getFineBalance());
         */
    
        int[] a = new int[] { 1, 2, 3, 4, 5 };
        int[] b = new int[(a.length) + 1];
    
        System.arraycopy(a, 0, b, 0, a.length);
        b[a.length] = 6;
        // for(int i=0;i<b.length;i++)
        // {
        // System.out.println(b[i]);
        // }
    
        /*
         * int[] c = new int[]{1,2,3,4,5,6}; b = new int[(c.length)+1];
         * 
         * System.arraycopy( c, 0, b, 0, c.length ); b[c.length]=7;
         * 
         * for(int i=0;i<b.length;i++) { System.out.println(b[i]); }
         */
    
        // int[] date = enterDate();
        // int[] date2 = book1.addTwoWeeks(date);
        // int[]date2= book1.getDateDue();
    
        System.out.println(studentArray[0].getFirstName());
    
        //boolean array=checkStuNum(45456);
        //System.out.println(array);
    
        //students[]array=lookUpLastName("sid");
        //array[0].getFirstName();
    
    }
    
    public static void returnBook(students borrower, books bookReturn) {
    
    }
    
    public static books[] lookUpTitleBooks(String title)// //////////////interchange
                                                        // the array-boolean
                                                        // firstArrayBook--two
                                                        // if statements
    {
    
        int counter = 0;
        for (int i = 0; i < bookArray.length; i++) {
            if (title.equalsIgnoreCase(bookArray[i].getTitle())
                    || ((bookArray[i].getTitle().toLowerCase())).contains(title
                            .toLowerCase())) {
                counter++;
            }
        }
        books[] booksLookUp = new books[counter];
        int counterS = 0;
        for (int i = 0; i < bookArray.length; i++) {
            if (title.equalsIgnoreCase(bookArray[i].getTitle())
                    || ((bookArray[i].getTitle().toLowerCase())).contains(title
                            .toLowerCase())) {
                booksLookUp[counterS] = bookArray[i];
                counterS++;
            }
        }
    
        return booksLookUp;
    }
    
    // look up last name of student
    public static students[] lookUpLastName(String lName) {
    
        students[] studentlName = new students[1] ;
    
        if (firstArrayStu == true) {
            int counter = 0;
            System.out.println("check");
            for (int i = 0; i < studentArray.length; i++) {
                if (lName.equalsIgnoreCase(studentArray[i].getLastName())   || ((studentArray[i].getLastName()).contains(lName.toLowerCase())) ){
                    counter++;
                    System.out.println("check if");
    
                }
                System.out.println("check for");
    
            }
            studentlName = new students[counter];
            int counterS = 0;
            for (int i = 0; i < studentArray.length; i++) {
                if (lName.equalsIgnoreCase(studentArray[i].getFirstName())
                        || ((studentArray[i].getFirstName().toLowerCase()))
                                .contains(lName.toLowerCase())) {
                    studentlName[counterS] = studentArray[i];
                    counterS++;
                }
            }
        }
    
        if (firstArrayStu == false) {
            int counter = 0;
            for (int i = 0; i < stuArrayAlt.length; i++) {
                if (lName.equalsIgnoreCase(stuArrayAlt[i].getFirstName())
                        || ((stuArrayAlt[i].getFirstName().toLowerCase()))
                                .contains(lName.toLowerCase())) {
                    counter++;
                }
            }
            studentlName = new students[counter];
            int counterS = 0;
            for (int i = 0; i < stuArrayAlt.length; i++) {
                if (lName.equalsIgnoreCase(stuArrayAlt[i].getFirstName())
                        || ((stuArrayAlt[i].getFirstName().toLowerCase()))
                                .contains(lName.toLowerCase())) {
                    studentlName[counterS] = stuArrayAlt[i];
                    counterS++;
                }
            }
        }
    
        return studentlName;
    }
    
    public static void checkOutBook(students borrower, books bookBorrow) {
    
        boolean canBorrow1 = checkFine(borrower);
        boolean canBorrow2 = checkBorrowedBooks(borrower);
        boolean canBorrow3 = checkBorrowedBooks(bookBorrow);
    
        if (canBorrow1 == false) {
            System.out.println("Your fine is too damn high");// alert window and
                                                                // redirect to
                                                                // main menu-so
                                                                // he/she can
                                                                // pay it if he
                                                                // wants to
        }
        if (canBorrow2 == false) {
            System.out.println("Your already have 3 books checked out");// alert
                                                                        // window
                                                                        // and
                                                                        // redirect
                                                                        // to
                                                                        // main
                                                                        // menu-
                                                                        // so
                                                                        // he/she
                                                                        // can
                                                                        // return
                                                                        // a
                                                                        // book
                                                                        // if he
                                                                        // wants
                                                                        // to
        }
        if (canBorrow1 == false) {
            System.out.println("This book has been checkd out");// alert window
                                                                // and redirect
                                                                // to main menu-
                                                                // so he/she can
                                                                // look for
                                                                // another book
                                                                // and check it
                                                                // out
        }
        if (canBorrow1 && canBorrow2 && canBorrow3) {
            borrower.insertBook(bookBorrow);
            bookBorrow.checkOutStatusChange();
            // alert window to show successful check out and redirect to main
            // menu
        }
    
    }
    
    public static boolean checkFine(students borrower) {
        boolean canBorrow1 = borrower.checkBorrowedBooks(borrower
                .getBookArray());
        return canBorrow1;
    }
    
    public static boolean checkBorrowedBooks(students borrower) {
        boolean canBorrow2 = borrower.checkFine(borrower);
        return canBorrow2;
    }
    
    public static boolean checkBorrowedBooks(books bookBorrow) {
        boolean canBorrow3 = bookBorrow.getCheckInLibrary();
        return canBorrow3;
    }
    
    public static int[] enterDate() {
        Scanner input = new Scanner(System.in);
        boolean dateTrue = false;
    
        int year, month, date;
    
        while (dateTrue == false) {
    
            System.out.println("Enter year");
            year = input.nextInt();
    
            System.out.println("Enter month");
            month = input.nextInt();
    
            System.out.println("Enter date");
            date = input.nextInt();
    
            // checking first date----------------------------------------
            year1 = ((year >= 2010) ? year : 0);
    
            month1 = ((month >= 1 && month <= 12) ? month : 0);
    
            if (month1 == 1) {
                date1 = ((date >= 1 && date <= 31) ? date : 0);
            }
    
            if (month1 == 2 && (year1 % 4) != 0) {
                date1 = ((date >= 1 && date <= 28) ? date : 0);
            }
    
            if (month1 == 2 && (year1 % 4) == 0) {
                date1 = ((date >= 1 && date <= 29) ? date : 0);
            }
    
            if (month1 == 3) {
                date1 = ((date >= 1 && date <= 31) ? date : 0);
            }
    
            if (month1 == 4) {
                date1 = ((date >= 1 && date <= 30) ? date : 0);
            }
    
            if (month1 == 5) {
                date1 = ((date >= 1 && date <= 31) ? date : 0);
            }
    
            if (month1 == 6) {
                date1 = ((date >= 1 && date <= 30) ? date : 0);
            }
    
            if (month1 == 7) {
                date1 = ((date >= 1 && date <= 31) ? date : 0);
            }
    
            if (month1 == 8) {
                date1 = ((date >= 1 && date <= 31) ? date : 0);
            }
    
            if (month1 == 9) {
                date1 = ((date >= 1 && date <= 30) ? date : 0);
            }
    
            if (month1 == 10) {
                date1 = ((date >= 1 && date <= 31) ? date : 0);
            }
    
            if (month1 == 11) {
                date1 = ((date >= 1 && date <= 30) ? date : 0);
            }
    
            if (month1 == 12) {
                date1 = ((date >= 1 && date <= 31) ? date : 0);
            }
    
            if (month1 == 0 || date1 == 0 || year1 == 0) {
                // do nothing boolean remains false
                // put alert window here
            } else {
                dateTrue = true;
            }
        }
    
        int[] dates = { year1, month1, date1 };
        return dates;
    }
    
    public void createStudent(int stuNum, String fName, String lName) {
        if (firstArrayStu == true) {
    
            for (int i = 0; i < studentArray.length; i++) {
                if (studentArray[i] == null) {
                    studentArray[i] = new students(stuNum, fName, lName);
    
                } else if (i == (studentArray.length - 1)) {
                    stuArrayAlt = new students[studentArray.length + 1];
                    System.arraycopy(studentArray, 0, stuArrayAlt, 0,
                            studentArray.length);
                    stuArrayAlt[studentArray.length] = new students(stuNum,
                            fName, lName);
                    firstArrayStu = false;
                }
            }
    
        } else if (firstArrayStu == false) {
            for (int i = 0; i < stuArrayAlt.length; i++) {
                if (stuArrayAlt[i] == null) {
                    stuArrayAlt[i] = new students(stuNum, fName, lName);
    
                } else if (i == (stuArrayAlt.length - 1)) {
                    studentArray = new students[stuArrayAlt.length + 1];
                    System.arraycopy(stuArrayAlt, 0, stuArrayAlt, 0,
                            stuArrayAlt.length);
                    studentArray[stuArrayAlt.length] = new students(stuNum,
                            fName, lName);
                    firstArrayStu = true;
                }
            }
        }
    }
    
    public static void createBook(String name, String author, String category,
            String isbn, double cost, double sRating) {
    
        if (firstArrayBook == true) {
            for (int i = 0; i < bookArray.length; i++) {
                if (bookArray[i] == null) {
                    bookArray[i] = new books(name, author, category, isbn,
                            cost, sRating);
    
                } else if (i == (bookArray.length - 1)) {
                    bookArrayAlt = new books[bookArray.length + 1];
                    System.arraycopy(bookArray, 0, bookArrayAlt, 0,
                            bookArray.length + 1);
                    bookArrayAlt[bookArray.length] = new books(name, author,
                            category, isbn, cost, sRating);
                    firstArrayBook = false;
                }
            }
        }
    
        else if (firstArrayBook == false) {
            for (int i = 0; i < bookArrayAlt.length; i++) {
                if (bookArrayAlt[i] == null) {
                    bookArrayAlt[i] = new books(name, author, category, isbn,
                            cost, sRating);
    
                } else if (i == (bookArrayAlt.length - 1)) {
                    bookArray = new books[bookArrayAlt.length + 1];
                    System.arraycopy(bookArrayAlt, 0, bookArray, 0,
                            bookArrayAlt.length + 1);
                    bookArray[bookArrayAlt.length] = new books(name, author,
                            category, isbn, cost, sRating);
                    firstArrayBook = false;
                }
            }
        }
    }
    
    public static boolean deleteStudent(String lName, int stuNum) {
        students[] arrayLookedUp = lookUpLastName(lName);
        boolean deleted = false;
        for (int i = 0; i < arrayLookedUp.length; i++) {
            if ((arrayLookedUp[i].getStuNum()) == stuNum) {
                System.out.println("checker");
                if (firstArrayStu == true) {
                    for (int j = 0; j < studentArray.length; j++) {
                        if (arrayLookedUp[i] == studentArray[j]) {
                            studentArray[j] = null;
                            deleted = true;
                            break;
                        }
                    }
                    break;
    
                } else if (firstArrayStu == false) {
                    for (int j = 0; j < stuArrayAlt.length; j++) {
                        if (arrayLookedUp[i] == stuArrayAlt[j]) {
                            stuArrayAlt[j] = null;
                            deleted = true;
                            break;
                        }
                    }
                }
            } else if (i == (arrayLookedUp.length - 1)) {
                deleted = false;
            }
        }
    
        return deleted;
    }
    
    public static boolean checkStuNum(int stuNum) {
    
        // private static students[] studentArray;
        // private static students[] stuArrayAlt;
        // private static boolean firstArrayStu=true;
        boolean stuNumNew = false;
    
        System.out.println("test");
        if (firstArrayStu == true) {
            for (int i = 0; i < studentArray.length; i++) {
                System.out.println("false");
    
                if ((studentArray[i].getStuNum()) == stuNum) {
                    System.out.println("true");
    
                    stuNumNew = true;
    
                    break;
                }
            }
        }
    
        else if (firstArrayStu == false) {
            for (int i = 0; i < stuArrayAlt.length; i++) {
                if ((stuArrayAlt[i].getStuNum()) == stuNum) {
                    stuNumNew = true;
    
                    break;
                }
            }
        }
    
        return stuNumNew;
    }
    

    }

    I have a student class with a constructor, and a method that states

    public String getFirstName() {
            return fName;
        }
    

    but still I am getting an error. I know it is a lot of code to go through, so once again any kind of help would be greatly appreciated.