Вылазит NullPointerException [дубликат]

242
07 января 2018, 06:22

На данный вопрос уже ответили:

  • Что такое Null Pointer Exception и как его исправить? 2 ответа

Не понимаю в чем проблема

public class Books {
String title;
String author;
}
public static void main(String[] args) {
    Books[] myBooks = new Books[3];
    int x = 0;
    myBooks[0].title = "Плоды Java";
    myBooks[1].title = "Java Гэтсби";
    myBooks[2].title = "Сборник рецептов";
    myBooks[0].author = "Боб";
    myBooks[1].author = "Сью";
    myBooks[2].author = "Ян";
    while (x < 3) {
        System.out.println(myBooks[x].title);
        System.out.println(",автор");
        System.out.println(myBooks[x].author);
        x = x + 1;
    }
}

}

Answer 1

Ответ @iSmoke верный, но я дополню тем, как заполнить массив книгами

Books[] myBooks = new Books[3]; //создаете массив с null
Arrays.fill(myBooks, new Book()); //заполняете массив, чтобы вместо null была пустая книга
myBooks[0].title = "blabla"; //заполняете информацией книгу
//  т.д

Когда вы создаете массив из обьектов (Book - класс, он не примитив) то все элементы массива равны null (потому что обьекты по умолчанию null). Когда вы обращаетесь к любому элементу массива

myBooks[0].title = ...

То вы по индексу 0 получаете null и пытаетесь обратиться к переменной, а как мы знаем, когда обьект null любое обращение к его частям (переменные, методы и т.д) вызывают NullPointerException.

Есть правда, исключение, если поля статические, но оно вам не подходят. Заполните массив книгами с помощью Arrays.fill

Answer 2

У тебя myBooks - массив объектов типа Books. Но здесь ты не создаешь ни одного объекта и не помещаешь их в массив, следовательно он у тебя пуст(заполнен null'ами)

Или вот так, при объявлении: Books[] myBooks = {new Books(), new Books(), new Books()};

READ ALSO
sqlite запросы в Room

sqlite запросы в Room

В DAO у меня Query в которую мне бы нужно подставить запрос where из конструктораWHERE всегда разный, но не пойму как подставить запрос целиком

224
перевод Double значения времени( сек) в unix формат

перевод Double значения времени( сек) в unix формат

Например, вот такая дата со временем: 201701

231
Композиция из java-приложений

Композиция из java-приложений

Доброго времени суток всем! Возникли интересные вопросы, на которые ответить у меня не хватит профессионального опытаПоэтому обращаюсь...

213
apache CollectionUtils.Transformer

apache CollectionUtils.Transformer

Ребят, помогите, не поинмаю что делатьЕсть задача: нужно создать метод который пегоняет коллекцию из одного типа в другой, например: Collection<Integer>...

196