Java – array null pointer exception error
I continued my school project and seemed to have encountered another mistake So what happens is basically that I get a null pointer exception, even if the code looks good I believe there is something wrong with my array. Even after several hours of searching, I can't find the error Once again, any help / solution will be 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,"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","9780002245845",54.50,12.5); private static books book5 = new books("title2","author2","category2","isbn2",12.5); private static books book6 = new books("title2",12.5); private static books book7 = new books("title2",12.5); private static books book8 = new books("title2",12.5); private static books book9 = new books("title2",12.5); private static books book0 = new books("title2",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,b,a.length); b[a.length] = 6; // for(int i=0;i<b.length;i++) // { // System.out.println(b[i]); // } /* * int[] c = new int[]{1,5,6}; b = new int[(c.length)+1]; * * System.arraycopy( c,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,stuArrayAlt,studentArray.length); stuArrayAlt[studentArray.length] = new students(stuNum,lName); firstArrayStu = false; } } } else if (firstArrayStu == false) { for (int i = 0; i < stuArrayAlt.length; i++) { if (stuArrayAlt[i] == null) { stuArrayAlt[i] = new students(stuNum,lName); } else if (i == (stuArrayAlt.length - 1)) { studentArray = new students[stuArrayAlt.length + 1]; System.arraycopy(stuArrayAlt,stuArrayAlt.length); studentArray[stuArrayAlt.length] = new students(stuNum,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,srating); } else if (i == (bookArray.length - 1)) { bookArrayAlt = new books[bookArray.length + 1]; System.arraycopy(bookArray,bookArrayAlt,bookArray.length + 1); bookArrayAlt[bookArray.length] = new books(name,srating); firstArrayBook = false; } } } else if (firstArrayBook == false) { for (int i = 0; i < bookArrayAlt.length; i++) { if (bookArrayAlt[i] == null) { bookArrayAlt[i] = new books(name,srating); } else if (i == (bookArrayAlt.length - 1)) { bookArray = new books[bookArrayAlt.length + 1]; System.arraycopy(bookArrayAlt,bookArray,bookArrayAlt.length + 1); bookArray[bookArrayAlt.length] = new books(name,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 declared method
public String getFirstName() { return fName; }
But I still got a mistake I know it takes a lot of code, so I would appreciate any help again
Solution
Since your code is currently written,
System.out.println(studentArray[0].getFirstName());
Because you will never initialize the array, you will throw an NPE
private static students[] studentArray;
Just declare it, not initialize it
Perhaps 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,"Ted")); studentArray.add(new students(45546,"Sid")); //...
If you promise to use arrays instead of lists,
private static students[] studentArray;
You need to initialize with something similar
private static students[] studentArray = new students[10];
Then you need to assign its elements
studentArray[0] = stu1;
or
studentArray[0] = new students(65435,"Ted");