How can I associate 3 authors with just one book?

1
package crud

class Start {
  static main(args) {
    Autor autor = new Autor()
    autor.nome = "Aline Gonzaga"
    autor.email ='[email protected]'
    autor.cpf =' 78544378654'


    Livro livro = new Livro(autor)
    livro.nome='Java: '
    livro.descricao= 'java'
    livro.valor= 378.99
    //livro.isbn= "8975849-54-5665-34-3-324-656-32-34-123"

    //livro.autor = autor


    livro.mostrarDetalhes()

    Ebook ebook = new Ebook()

    Autor outroAutor = new Autor()
    outroAutor.cpf ='754.548.545-34'
    outroAutor.email='[email protected]'
    outroAutor.nome='Jesus Cristo'

    Livro outroLivro = new Livro(outroAutor)
    outroLivro.descricao =' Como fazer o bem ao próximo?'
    outroLivro.isbn = ' 8754868596845986946'
  //    outroLivro.nome =' Fazendo o que é agradável a Deus'
    outroLivro.valor = 467.99
  //    outroLivro.autor = outroAutor
    outroLivro.mostrarDetalhes()


  }
}

package crud

class Book {

String nome
String descricao
double valor
String isbn
Autor autor

void mostrarDetalhes() {
    println "mostrando detalhes do livro: "
    println "Nome: " + nome
    println "Descrição: " + descricao
    println "ISBN " + isbn
    println "Valor: "+ valor
    autor.mostrarDetalhes()
    println "-----------------------------"
}
    public  Livro(Autor autor) {
    this()
    this.autor = autor
    }

    public Livro(){
        this.isbn = "0000-0000000-000000-000000-00"
        this.nome = " "
    }

}

    
asked by anonymous 26.12.2015 / 02:45

2 answers

1

I do not know if you're familiar with Collections and Generics , but this is a way to solve the problem.

Instead of its Livro class, it has an attribute of type Autor , you can have a List<Autor> that represents a list of authors of the respective book.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Livro {

    List<Autor> listaDeAutores = new ArrayList<>();
    // Outros atributos do livro...

    Livro(Autor autor){
        listaDeAutores.add(autor);
    }

    Livro (Autor...autores){
        listaDeAutores.addAll(Arrays.asList(autores));
    }

    // Métodos...
}


That way you can create a new book containing an author. For example:

Autor autor = // ...
Livro livro = new Livro(autor);


Or, with several authors. For example:

Autor autor = // ...
Autor segundoAutor = // ...
Autor terceiroAutor = // ...

Livro livro = new Livro(autor, segundoAutor, terceiroAutor);

To display the list of authors you can retrieve the list contained in the listaDeAutores attribute and loop through it:

List<Autor> autoresDoLivro = livro.listaDeAutores;

for(Autor autor : autoresDoLivro){
   System.out.println("Nome: " + autor.nome);
}

Is not related to what was asked, but consider encapsulating the attributes and methods of your objects.
This question has some explanations.

    
26.12.2015 / 03:49
1

If I understood correctly you could do a construtror in the Book class that gets 3 arguments where each would be an author. That's if you want to always associate 1 author or 3 authors with a book. If you prefer to make this association dynamically (ranging from 1 to x authors per book), I believe a solution would be to use array of x positions where each position holds an author. Already only pass this array as argument in the constructor.

    
26.12.2015 / 03:30