он говорит: индекс массива выходит за пределы
Во-первых, он не может сказать это с данным кодом, потому что он не компилируется с последними тремя методами.
И, ну, authors.length == 2
, а в вашем массиве есть только индикаторы 0 и 1
Если вы действительно хотите «получить авторов», вы хотите вернуть массив, а не конкретный
public Author[] getAuthors() {
return authors;
}
И если вы хотите получить его, добавьте индекс.
Это также хорошая привычка добавлять проверку границ
public Author getAuthor(int index) {
return (index < 0 || index >= authors.length) ? null : authors[index];
}
Однако, с этими исправлениями вы могли бы видеть null
сейчас, потому что у вас на самом деле two список;тот, который вы передадите new Book()
, и поле в экземпляре этого объекта.
Скорее вы захотите сделать
private Authors[] authors;
public Book(String name, Author authors[], double price, int qty) {
this.name = name;
this.authors = authors;
И в основном методе создать авторов
Author[] authors = new Author[] {
new Author("Tan Ah Teck", "AhTeck@somewhere.com", 'm'),
new Author("Paul Tan", "Paul@nowhere.com", 'm')
};
Book b = new Book("name", authors, ...);
System.out.println(Arrays.toString(b.getAuthors()));
Также в методах получения имен авторов, электронных писем и полов говорится: Неизвестные авторы классов []
Поскольку authors[].blah
не является допустимым синтаксисом.Вам нужно перебрать каждое из значений массива, чтобы получить соответствующие поля.
Я бы предложил Arrays.stream
методы и StringJoiner
для обработки