diff --git a/book/src/main/java/ru/molokoin/Book.java b/book/src/main/java/ru/molokoin/Book.java index 8988d32..937d17b 100644 --- a/book/src/main/java/ru/molokoin/Book.java +++ b/book/src/main/java/ru/molokoin/Book.java @@ -5,21 +5,25 @@ public class Book { private Publisher publisher; private int year; private String[] authors; - private Publisher[] publishers = Publisher.getDefaultArray(); Book(){} Book(String name, int year, Publisher publisher){} Book(String name, String author, int year, Publisher publisher){ this(name, year, publisher); - setAuthors(uppendAuthors((String)author)); + uppendAuthors(author); } Book(String name, String[] authors, int year, Publisher publisher){ this(name, year, publisher); - String[] a = (String[]) authors; + String[] a = authors; setAuthors(a); } + /** + * Создаем массив книг, заполняем книги данными по умолчанию + * и возвращаем массив книг + * @return + */ public static Book[] getDefaultArray(){ - Book[] books = new Book[2]; + Book[] books = new Book[5]; //book 1 String name = "Computer Science: основы программирования на Java, ООП, алгоритмы и структуры данных"; @@ -38,84 +42,191 @@ public class Book { 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(toString()); System.out.println("Наименование книги (name) :: " + name); getPublisher().print(); System.out.println("Год издания (year) :: " + year); - System.out.println("Авторы:"); + System.out.println("Авторы: " + getAuthorsCount(authors) + " человек ..."); int i = 0; - while (i < getAuthorsCount()){ + while (i < getAuthorsCount(authors)){ System.out.println((i + 1) + ". " + getAuthors()[i]); i++; } System.out.println("-------------------------------"); } - //TODO добавляем список авторов - public String[] uppendAuthors(String author){ + /** + * Добавляем авторов книги + * @param author + */ + public void uppendAuthors(String author){ String[] result; - try { - if (getAuthors() == null)throw new NullPointerException("Перечень авторов пока пуст ..."); - } catch (NullPointerException e) { - e.printStackTrace(); - result = new String[1]; - result[0] = author; - } finally { - result = new String[getAuthorsCount() +1]; + /** + * в случае, если массив authors еще не создан и писать нового автора некуда, + * создаем пустой массив, пишем в него данные нового автора + */ + if (getAuthors() == null){ + try { + throw new NullPointerException("в случае, если массив authors еще не создан и писать нового автора некуда, создаем пустой массив, пишем в него данные нового автора ..."); + } catch (NullPointerException e) { + //e.printStackTrace(); + System.out.println(e); + result = new String[1]; + result[0] = author; + setAuthors(result); + } + } + /** + * Если массив авторов книги уже существует, создаем новый массив с увеличенным на единицу + * количеством полей и переписываем в него данные старого массива, + * после чего добавляем в него новую запись. + */ + else{ + int count = getAuthorsCount(authors); + result = new String[count +1]; + //переписываем данные старого массива int i = 0; - while (i < getAuthorsCount()){ - result[i] = getAuthorByIndex(i); + while (i < count){ + result[i] = getAuthors()[i]; i++; } + //добавляем нового автора + result[count] = author; + setAuthors(result); } - return 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; } - //количество авторов книги - public int getAuthorsCount(){ + /** + * возвращает количество авторов книги + * @param authors + * @return + */ + public static int getAuthorsCount(String[] authors){ + //проверяем, имеется ли записи в перечне авторов int count = 0; try { - if (getAuthors() == null) throw new NullPointerException("авторы еще не добавлены в список ..."); - } catch (NullPointerException e) { + if (authors == null) throw new NullPointerException ("Авторы книги не установлены ..."); + } catch (Exception e) { + //e.printStackTrace(); count = 0; - } finally { - count = getAuthors().length; } + if (authors != null) count = authors.length; return count; } /** + * Устанавливаем название книги * @param name the name to set */ public void setName(String name) { - //TODO название книги не должно быть пустой ссылкой; - this.name = 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) { - //TODO издательство не должно быть пустой ссылкой; - this.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) { - //TODO год издания должен быть строго больше нуля - this.year = 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) { - //TODO массив не должен содержать пустых ссылок - this.authors = 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 @@ -139,25 +250,39 @@ public class Book { * @return the author */ public String[] getAuthors() { - String[] result = new String[0]; - try { - if (authors == null) throw new NullPointerException("Авторы еще не заносились в список ..."); - } catch (NullPointerException e) { - // TODO: handle exception - e.printStackTrace(); - result = new String[0]; - } finally { - result = authors; - } - return result; + 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++; + } + } } diff --git a/book/src/main/java/ru/molokoin/Publisher.java b/book/src/main/java/ru/molokoin/Publisher.java index 23a0a3d..fb0cc3b 100644 --- a/book/src/main/java/ru/molokoin/Publisher.java +++ b/book/src/main/java/ru/molokoin/Publisher.java @@ -19,11 +19,13 @@ public class Publisher { Publisher[] defaultPublishers = new Publisher[4]; defaultPublishers[0] = new Publisher("Проспект", "Москва"); defaultPublishers[1] = new Publisher("Питер", "Санкт-Петербург"); - defaultPublishers[2] = new Publisher("БХВ", "Санкт-Петербург"); + defaultPublishers[2] = new Publisher("БХВ", "Санкт-Петебург"); defaultPublishers[3] = new Publisher("Диалектика", "Киев"); return defaultPublishers; } - //выводим в консоль данные Издательства + /** + * выводим в консоль данные Издательства + */ public void print(){ System.out.println("Издательство: " + getName() + " ----> " + "город: " + getSity()); } @@ -42,8 +44,9 @@ public class Publisher { } } /** + * Устанавливаем наименование города - где находится издательство + * Наименование города издания не должно быть пустой ссылкой * @param sity the sity to set - * TODO: Наименование города издания не должно быть пустой ссылкой */ public void setSity(String sity) { String defaultSity = "noname sity"; diff --git a/book/target/classes/ru/molokoin/Book.class b/book/target/classes/ru/molokoin/Book.class index a71e01d..e94b8fb 100644 Binary files a/book/target/classes/ru/molokoin/Book.class and b/book/target/classes/ru/molokoin/Book.class differ diff --git a/book/target/classes/ru/molokoin/Publisher.class b/book/target/classes/ru/molokoin/Publisher.class index b522194..82387e2 100644 Binary files a/book/target/classes/ru/molokoin/Publisher.class and b/book/target/classes/ru/molokoin/Publisher.class differ