Java, как я могу сделать книгу класса, который может иметь одного или нескольких авторов - PullRequest
0 голосов
/ 02 декабря 2018

Итак, я практикую объектно-ориентированное программирование и пытаюсь создать класс Book, в котором может быть несколько авторов, но я не знаю, как это сделать.Это UML исключения: enter image description here

Это мой класс для авторов, который отлично работает:

//author class @ Ferran Tombal
public class Author {

    //attributen van de class auteur
    private String name;
    private String email;
    private char gender;

    //constructor
    public Author (String name, String email, char gender){
        this.name = name;
        this.email = email;
        this.gender= gender;
    }

    //methodes
    public String getName(){
        return name;
    }

    public String getEmail(){
        return email;
    }

    public void setEmail(String email){
        this.email = email;
    }

    public char getGender(){
        return gender;
    }

    //methode om gegevens van autheur opbject op te halen
    public String toString(){
        return "Author[name = " + name + ", email = " + email + ", gender = " + gender + "]";
    }
}

А вот класс Book, который я пробовалto make:

public class Book {

    //attributes
    private String name;
    private Author authors [] = new Author[2];
    private double price;
    private int qty = 0;


    public Book(String name, Author authors[], double price, int qty) {
        this.name = name;
        authors[0] = new Author("Tan Ah Teck", "AhTeck@somewhere.com", 'm');
        authors[1] = new Author("Paul Tan", "Paul@nowhere.com", 'm');
        this.price = price;
        this.qty = qty;
    }


    public String getName() {
        return name;
    }

    public Author getAuthors() {
        return authors[authors.length];

    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getQty() {
        return qty;
    }

    public void setQty(int qty) {
        this.qty = qty;
    }

    public String toString() {
        return "Book [name = " + name + " authors = " + authors[0] + " email = " + authors[0].getEmail() + " price = " + price + " qty = " + qty + "]";
    }

    //methodes om gegevens van de autheur op te halen
    public String getAuthorNames() {
        return authors[].getName();
}

    public String getAuthorEmails() {
        return authors[].getEmail();
    }

    public char getAuthorGenders() {
        return authors[].getGender();
    }
}

Поэтому, когда я пытаюсь создать объект книги в моем файле main.java, конструктор класса книги не работает.Также в этой функции: public Author getAuthors() { он говорит: Индекс массива выходит за пределы.Также в методах получения имен авторов, электронных писем и полов говорится: Неизвестные авторы класса [].

Как я могу изменить этот класс книги, чтобы книга могла иметь одного или нескольких авторов?(Класс Book работал, когда в книге мог быть только 1 автор, но сейчас я пытаюсь изменить его, чтобы у книги было больше авторов)

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Когда вы не предоставляете это ключевое слово для авторов в вашем конструкторе, код работает с вашим параметром конструктора, а не с переменной класса, поэтому вы столкнулись с этой проблемой.

попробуйте удалить авторов из конструктора следующим образом:

public Book(String name, double price, int qty)
0 голосов
/ 02 декабря 2018

он говорит: индекс массива выходит за пределы

Во-первых, он не может сказать это с данным кодом, потому что он не компилируется с последними тремя методами.

И, ну, 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 для обработки

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