在数组的开头获取NullPointerException?

时间:2013-02-22 01:15:10

标签: java arrays nullpointerexception

我不确定为什么我在打印出来时在数组的开头(见上一个println)得到一个nullPointerException。我之前看过一个nullPointException,但它是在一个数组的末尾。我不明白为什么它在一开始。另外,如果有人可以帮助摆脱异常,我将不胜感激。

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

    }

}

1 个答案:

答案 0 :(得分: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本书之后的书籍将被悄悄忽略。