Как избежать NullPointException в BufferReader? - PullRequest
1 голос
/ 28 октября 2019

Поэтому я написал этот код для чтения файла, содержащего числа, однако я получаю ошибку NullPointerException при попытке присвоить значение массиву.

Вот мой код:

private static int []a;
    public static int i = 0;
    public static void main(String[] args) {
        // Get a random generated array
        // I'll read from file, which contains generated list of numbers.
        BufferedReader reader = null;

        try {
            File file = new File("numbers.txt");
            reader = new BufferedReader(new FileReader(file));



            for(String line = reader.readLine(); line!= null; line = reader.readLine()){
                //I get error here
                a[i] = Integer.parseInt(line);
                i++;
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

1 Ответ

3 голосов
/ 28 октября 2019

Вы забыли инициализировать массив , для его инициализации вы можете использовать

private static int []a = new int[100];

Будьте осторожны при работе с массивами фиксированного размера, потому что в этом конкретном случаеВ случае, если ваш файл содержит более 99 строк, ваша программа не будет выполнена. Цикл while будет пытаться выписать границы массива и выдаст исключение IndexOutOfBounds.

  • Если вы хотите использовать массивы динамического размера, которые будут увеличиваться автоматически при добавлении элемента, узнайте о ArrayLists .

    Разница между встроенным массивом и ArrayList в Java заключается в том, что размер массива нельзя изменить (если вы хотите добавить или удалить элементы в / из массива, вы должны создатьновый). Хотя элементы можно добавлять и удалять из ArrayList в любое время.

Стоит отметить, что обычно при чтении из файла лучше использовать while цикл вместо for loop :

while ((line = r.readLine()) != null) {
    a[i] = Integer.parseInt(reader.readLine());
    i++;
}

Таким образом цикл завершится, когда BufferedReader достигнет конца файла, как r.readLine()метод вернет null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...