2013-02-22 48 views
0

我不知道爲什麼我打印出來時,在我的數組開頭出現nullPointerException(請參見上一個println)。我以前見過一個nullPointException,但它在數組的末尾。我不明白爲什麼它在一開始。另外,如果有人能幫助擺脫這個例外,我將不勝感激。在數組的開頭獲取NullPointerException?

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 


public class Main { 
    public static void main(String[] args) throws FileNotFoundException { 

     File file = new File("Book.txt"); 
     Scanner sc = new Scanner(file); 

     Book[] books = new Book[20]; 

     int x = 0; 
     while(sc.hasNext()){ 
      int id, year; 
      String name, author; 

      //scan data for each book and create new book object 
      id = Integer.valueOf(sc.next()); 
      year = Integer.valueOf(sc.nextLine().trim()); 
      name = sc.nextLine(); 
      author = sc.nextLine(); 

      books[x] = new Book(id, name, year, author); 
      x++; 
     } 

     for(Book b : books){ 
      System.out.println(b.toString()); 
     } 

    } 

} 
+0

你怎麼知道它是在開始而不是結束?如果輸入的書籍少於20本,該程序將與NPE崩潰,如果輸入了超過20本書籍,則會出現索引超出限制。 – dasblinkenlight 2013-02-22 01:18:44

+1

告訴我們這是沒有意義的,有一個NPE w/o指示哪一行,什麼是空。如何加入一些printlns來檢查你對數據的假設或使用調試器? – 2013-02-22 01:19:03

回答

4

您的程序非常脆弱。它預計有20本書的文件:如果輸入的書少於20本,您將在打印循環中得到空指針異常;如果輸入的書籍超過20本,您將在閱讀循環中獲得數組索引超出範圍的例外。

,則應該更換for-in迴路用一個簡單的for,並添加一個限制,你從文件中讀取圖書的數量,就像這樣:

while(sc.hasNext() && x < 20) { 
    ... 
} 
for (int i = 0 ; i != x ; i++) { 
    System.out.println(books[i].toString()); 
} 

如上重組的程序是少了很多原諒:當輸入的書籍少於20本時,它不會崩潰,它將打印與文件中的條目數量相同的條目。如果檔案中的書籍數量超過預先分配的數量,那麼20號以後的書籍會被悄悄忽略。

+0

謝謝。我沒有用Java編寫好幾個月。我現在非常生鏽。我不知道如何打破現在的生鏽:( – 2013-02-22 03:01:04

相關問題