2013-04-01 84 views
3

我正在继续我的学校项目,并且似乎遇到了另一个错误。所以发生了什么是基本上我收到一个空指针异常,即使代码看起来不错。我相信我的阵列有些问题,即使经过几个小时的搜索,我似乎也找不到错误。再次,任何帮助/解决方案将不胜感激。数组空指针异常错误

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; 
} 

}

我有一个学生类构造函数,各国

public String getFirstName() { 
     return fName; 
    } 

但还是我得到一个错误的方法。我知道这是很多代码,所以再次提供任何形式的帮助将不胜感激。

+0

错误发生在哪里?也就是说,堆栈跟踪指向哪一行? (这也将有助于粘贴错误消息。) – iamnotmaynard

+0

检查log cat中的行号,其中空指针异常。 –

+0

在这里过去异常堆栈跟踪! –

回答

8

当你的代码是目前写的,

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

将抛出一个NPE,因为你从来没有初始化数组。

private static students[] studentArray; 

只声明它,不初始化它。

也许你应该重构你的代码如下

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")); 
//... 

如果你致力于使用数组,而不是一个列表,

private static students[] studentArray; 

需要的东西,如

初始化
private static students[] studentArray = new students[10]; 

然后您需要指定其元素

studentArray[0] = stu1; 

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

我使用与您建议使用的完全相同的代码行来初始化我的数组,因为某些原因,它仍然无法工作。 – user2229592

+0

初始化它还不够,在引用它之前,您仍然需要为这些元素指定一个值。看到我添加的最后两行。 – jedwards

4

你应该总是试图访问它之前创建一个对象。 您已经声明指向数组的引用:

private static students[] studentArray; 

,但从来没有分配任何对象引用。因此你得到一个NullPointerException。

使用此:

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

上面的代码将创建一个新对象(学生的阵列)中,由参考变量(studentArray)指出。 OR

可以使用ListSet它们是更有效的,然后阵列。

+0

我做了你说的,没有工作。同样的错误。 – user2229592

+0

您对bookArray和bookArrayAlt犯了同样的错误。对他们也一样。检查它给你例外的那一行。 –