package ru.molokoin; public class Book { private String name; private Publisher publisher; private int year; private String[] authors; Book(){} Book(String name, int year, Publisher publisher){} Book(String name, String author, int year, Publisher publisher){ this(name, year, publisher); uppendAuthors(author); } Book(String name, String[] authors, int year, Publisher publisher){ this(name, year, publisher); String[] a = authors; setAuthors(a); } /** * Создаем массив книг, заполняем книги данными по умолчанию * и возвращаем массив книг * @return */ public static Book[] getDefaultArray(){ Book[] books = new Book[5]; //book 1 String name = "Computer Science: основы программирования на Java, ООП, алгоритмы и структуры данных"; books[0] = new Book(); books[0].setName(name); books[0].uppendAuthors("Седжвик Роберт"); books[0].uppendAuthors("Уэйн Кевин"); books[0].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "Питер")); books[0].setYear(2018); //book 2 name = "Разработка требований к программному обеспечению. 3-е издание, дополненное"; books[1] = new Book(); books[1].setName(name); books[1].uppendAuthors("Вигерс Карл"); books[1].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "БХВ")); books[1].setYear(2019); //book 3 name = "Java. Полное руководство, 10-е издание"; books[2] = new Book(); books[2].setName(name); books[2].uppendAuthors("Шилдт Гербертт"); books[2].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "Диалектика")); books[2].setYear(2018); //book 4 name = "C/C++. Процедурное программирование"; books[3] = new Book(); books[3].setName(name); books[3].uppendAuthors("Полубенцева М.И."); books[3].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "БХВ")); books[3].setYear(2017); //book 5 name = "Конституция РФ"; books[4] = new Book(); books[4].setName(name); books[4].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "Проспект")); books[4].setYear(2020); return books; } /** * Печатть данных о книге в консоль */ public void print(){ System.out.println("-------------------------------"); System.out.println("Наименование книги (name) :: " + name); getPublisher().print(); System.out.println("Год издания (year) :: " + year); System.out.println("Авторы: " + getAuthorsCount(authors) + " человек ..."); int i = 0; while (i < getAuthorsCount(authors)){ System.out.println((i + 1) + ". " + getAuthors()[i]); i++; } System.out.println("-------------------------------"); } /** * Добавляем авторов книги * @param author */ public void uppendAuthors(String author){ String[] result; /** * в случае, если массив authors еще не создан и писать нового автора некуда, * создаем пустой массив, пишем в него данные нового автора */ if (getAuthors() == null){ try { throw new NullPointerException("в случае, если массив authors еще не создан и писать нового автора некуда, создаем пустой массив, пишем в него данные нового автора ..."); } catch (NullPointerException e) { //e.printStackTrace(); System.out.println(e.getMessage()); result = new String[1]; result[0] = author; setAuthors(result); } } /** * Если массив авторов книги уже существует, создаем новый массив с увеличенным на единицу * количеством полей и переписываем в него данные старого массива, * после чего добавляем в него новую запись. */ else{ int count = getAuthorsCount(authors); result = new String[count +1]; //переписываем данные старого массива int i = 0; while (i < count){ result[i] = getAuthors()[i]; i++; } //добавляем нового автора result[count] = author; setAuthors(result); } } /** * Возвращает данные поля author, по индексу поля в массиве * индексы нумеруются с нуля и не могут быть отрицательными. * @param index * @return */ public String getAuthorByIndex(int index){ //при получении отрицательного индекса, меняем его значение на ноль, сообщаем пользователю о проведеных изменениях if (index < 0){ try { throw new IllegalArgumentException("В метод public String getAuthorByIndex(int index) передано значение меньше нуля, массив не может содержать отрицательное количество полей. Значение индекса исправлено на значение по умолчанию: 0 ..."); } catch (Exception e) { e.printStackTrace(); index = 0; } } String author = getAuthors()[index]; return author; } /** * возвращает количество авторов книги * @param authors * @return */ public static int getAuthorsCount(String[] authors){ //проверяем, имеется ли записи в перечне авторов int count = 0; try { if (authors == null) throw new NullPointerException ("Авторы книги не установлены ..."); } catch (Exception e) { //e.printStackTrace(); count = 0; } if (authors != null) count = authors.length; return count; } /** * Устанавливаем название книги * @param name the name to set */ public void setName(String name) { // название книги не должно быть пустой ссылкой if (name == null){ try { throw new NullPointerException("В качестве названия книги передана пустая ссылка, полю установлено значение по умолчанию {noname book}"); } catch (NullPointerException e) { System.out.println("Ошибка: " + e); e.printStackTrace(); this.name = "noname book"; } }else { this.name = name; } } /** * Устанавливаем данные об издательстве. * издательство не должно быть пустой ссылкой * @param publisher the publisher to set */ public void setPublisher(Publisher publisher) { if (publisher == null){ try { throw new NullPointerException("Передана пустая ссылка, при внесении данных об издательстве, что недопустимо. Установлено знаение издательства по умолчанию."); } catch (NullPointerException e) { e.printStackTrace(); System.out.println("Ошибка: " + e); this.publisher = new Publisher(); } }else{ this.publisher = publisher; } } /** * устанавливаем год издания книги * - год издания должен быть строго больше нуля * @param year the year to set */ public void setYear(int year) { if (year < 0){ try{ throw new IllegalArgumentException("В качестве года издания книги указан значение еньше нуля. Значение заменен на значение по умолчанию {1800}"); } catch (IllegalArgumentException e){ e.printStackTrace(); System.out.println("Ошибка: " + e); year = 1800; } }else { this.year = year; } } /** * Устанавливаем перечень авторов книги * @param author the author to set */ public void setAuthors(String[] authors) { try { if (authors == null) throw new NullPointerException("setAuthors() ... передан пустой список авторов"); } catch (NullPointerException e) { e.printStackTrace(); this.authors = new String[0]; } finally { this.authors = authors; } } /** * @return the name */ public String getName() { return name; } /** * @return the publisher */ public Publisher getPublisher() { return publisher; } /** * @return the year */ public int getYear() { return year; } /** * @return the author */ public String[] getAuthors() { return this.authors; } public static void main(String[] args) { Book[] books = Book.getDefaultArray(); //Вывод данных по умолчанию int i = 0; while (i < books.length){ books[i].print(); i++; } //исправляем данные о городе издательства БХВ String wrightSity = "Санкт-Петербург"; String wrongSity = "Санкт-Петебург"; i = 0; while (i < books.length){ if (books[i].getPublisher().getSity() == wrongSity){ books[i].getPublisher().setSity(wrightSity); } i++; } //пояснения пользователю System.out.println("#############################################"); System.out.println("Вывод изменился для всех книг, изданных издательством \"БХВ\"."); System.out.println("Устранена опечатка в наименовании города. \"Санкт-Петебург\" заменено на \"Санкт-Петербург\". " + "Была пропущена буква: \"Б\"."); System.out.println("#############################################"); //Вывод исправленных данных i = 0; while (i < books.length){ books[i].print(); i++; } } }