数组空指针exception错误

我继续我的学校项目,似乎遇到了另一个错误。 所以发生的事情基本上是我收到一个空指针exception,即使代码看起来很好。 我相信我的arrays出了问题,即使经过几个小时的搜索,我也无法找到错误。 再一次,任何帮助/解决方案将不胜感激。

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 RR 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 = 2010) ? year : 0); month1 = ((month >= 1 && month = 1 && date = 1 && date = 1 && date = 1 && date = 1 && date = 1 && date = 1 && date = 1 && date = 1 && date = 1 && date = 1 && date = 1 && 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; } 

}

我有一个带有构造函数的学生类,以及一个声明的方法

 public String getFirstName() { return fName; } 

但我仍然得到一个错误。 我知道这需要经过很多代码,所以再次提供任何帮助都会非常感激。

由于您的代码目前已编写,

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

因为你永远不会初始化数组,所以会抛出一个NPE。

 private static students[] studentArray; 

只是声明它,不会初始化它。

也许您应该按如下方式重构代码

 private static ArrayList studentArray = new ArrayList(); // 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")); //... 

如果您承诺使用数组而不是List,

 private static students[] studentArray; 

需要用类似的东西进行初始化

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

然后你需要分配它的元素

 studentArray[0] = stu1; 

要么

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

在尝试访问对象之前,应始终创建对象。 您已声明指向数组的引用:

 private static students[] studentArray; 

但从未将任何对象分配给引用。 因此,您将获得NullPointerException。

用这个 :

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

上面的代码将创建一个新对象(学生数组),由引用变量(studentArray)指向。 要么

您可以使用比数组更高效的List或Set 。