Estou tentando realizar um trabalho da faculdade mas não estou conseguindo…
a descrição do trabalho segue a baixo:
Uma biblioteca armazena as seguintes informações dos livros em seu acervo: nome da obra, nome do autor, editora e número de páginas. Escreva um algoritmo altamente modularizado que leia e armazene as informações de 500 livros e em seguida disponibilize os seguintes dados:
a) Nome do autor com mais obras catalogadas;
Então eu sei que posso criar um arraylist de Livros, mas como percorrer este array e ao mesmo tempo trazer o nome do autor com mais obras.
Por “altamente modularizado” entendo que seja necessária uma classe Autor. Nesta pode ser colocada alguma forma de relação, tal como índices para os livros que correspondem a este autor. Desta forma pode percorrer a listagem de autores e procurar pelo que possui mais obras.
[]'s
L
lechnerdr
Fala Adelar,
Blz cara?
O que você quer dizer que eu teria então que ter na minha classe Livro um atributo Autor?
E na minha classe Autor um atributo List<Livro> ??
Obrigado
Adelar
lechnerdr:
Fala Adelar,
Blz cara?
O que você quer dizer que eu teria então que ter na minha classe Livro um atributo Autor?
E na minha classe Autor um atributo List<Livro> ??
Obrigado
Pode ser assim. Você pode obter a quantidade de livros da list na classe Autor. Só lembrando que esta é uma relação de n para n, ou seja, um livro pode ter um ou mais autores e um autor pode ter um livro ou mais.
[]'s
L
lechnerdr
Digamos que eu queira fazer um relação 1 para n, ou seja, 1 autor poder ter vários livros… quando se tem um relação 1 para n, aquele que tem o N é o que recebe o atributo né?
Neste caso é uma relação de 1 para 1. Pois como como você somente instancia somente uma classe Autor cada autor pode ter somente um livro.
Trocando o atributo livro para o tipo ArrayList, por exemplo, permite colocar uma relação de 1 para n.
[]'s
L
lechnerdr
Putz,
É verdade!!!
Dei uma melhora, ve o que achas…
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagebr.com.teste;importjava.util.ArrayList;importjava.util.List;/** * * @author Darkside2 */publicclassAutor{privateStringnomeAutor;privateList<Livro>livro;privateintnumeroDeObra=0;publicAutor(){this.livro=newArrayList<Livro>();}publicAutor(StringnomeAutor){this.nomeAutor=nomeAutor;this.numeroDeObra++;}publicStringgetNomeAutor(){returnnomeAutor;}publicvoidsetNomeAutor(StringnomeAutor){this.nomeAutor=nomeAutor;}publicList<Livro>getLivro(){returnlivro;}publicvoidaddLivro(Livrolivro){this.livro.add(livro);}}
Absss
G
gemeosguimaraes
O exercício pede um algoritmo. Não uma implementação em Java. Ou estou errado?
L
lechnerdr
Exato ele pede um algoritmo, mas estou tentando implementar em Java…
Mas você teria alguma ideia de algoritmo para este exercicio?
Obrigado,
Abss
Adelar
lechnerdr:
Putz,
É verdade!!!
Dei uma melhora, ve o que achas…
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagebr.com.teste;importjava.util.ArrayList;importjava.util.List;/** * * @author Darkside2 */publicclassAutor{privateStringnomeAutor;privateList<Livro>livro;privateintnumeroDeObra=0;publicAutor(){this.livro=newArrayList<Livro>();}publicAutor(StringnomeAutor){this.nomeAutor=nomeAutor;this.numeroDeObra++;}publicStringgetNomeAutor(){returnnomeAutor;}publicvoidsetNomeAutor(StringnomeAutor){this.nomeAutor=nomeAutor;}publicList<Livro>getLivro(){returnlivro;}publicvoidaddLivro(Livrolivro){this.livro.add(livro);}}
Absss
Isso. Agora você pode fazer um método que receba uma lista de autores, armazene o com maior quantidade de livros que encontrar e retorne o índice deste autor (ou retorne a própria classe).
[]'s
G
gemeosguimaraes
você terá e criar um registro para armazenar os dados e um array para armazenar o tipo do registro.
Adelar
Dependendo da disciplina que este problema foi passado a forma que @gemeosguimaraes passou pode se encaixar melhor.
Vou ter que sair. Boa sorte. Amanhã visito o tópico novamente
[]'s
ViniGodoy
Existe uma classe chamada Map, que permite criar uma relação entre um objeto (que pode ser um autor) e um número.
Em java, ficaria:
//ContaMap<Autor,Integer>contaLivrosDoAutor=newHashMap<Autor,Integer>();for(Livrolivro:livros){Autorautor=livro.getAutor();if(!contaLivrosDoAutor.contains(autor){contaLivrosDoAutor.put(autor,0);}contaLivrosDoAutor.put(autor,contaLivrosDoAutor.get(Autor)+1);}//Vê qual autor teve mais livrosAutorautor=null;intcount=0;for(Entry<Autor,Integer>contagemAutor:contaLivrosAutor){if(contagemAutor.getValue()>count){autor=contagemAutor.get();count=contagemAutor.getValue();}}System.out.println("And the oscar goes to..."+autor.getNome());
L
lechnerdr
Fala Vini,
Blz?
Cara não entendi a tua implementação…
No 1 for, tu itera sobre livro, mas aonde está esta lista?
Outra duvida seria aonde fica o meu atributo autor?? pois ali você faz livro.getAutor()
Obrigado,
Abss
Adelar
Conseguiu resolver?
L
lechnerdr
Fala Adelar,
Blz?
Cara fiz uma implementação conforme o Vini deu a ideia…
Abaixo segue a minha implementação:
publicclassLivro{privateStringnomeDaObra;privateStringeditora;privateintnumeroDePagina;privateStringnomeAutor;publicLivro(){}publicLivro(StringnomeDaObra,Stringeditora,intnumeroDePagina,Stringautor){this.nomeDaObra=nomeDaObra;this.editora=editora;this.numeroDePagina=numeroDePagina;this.nomeAutor=autor;}publicStringgetEditora(){returneditora;}publicvoidsetEditora(Stringeditora){this.editora=editora;}publicStringgetNomeDaObra(){returnnomeDaObra;}publicvoidsetNomeDaObra(StringnomeDaObra){this.nomeDaObra=nomeDaObra;}publicintgetNumeroDePagina(){returnnumeroDePagina;}publicvoidsetNumeroDePagina(intnumeroDePagina){this.numeroDePagina=numeroDePagina;}publicStringgetNomeAutor(){returnnomeAutor;}publicvoidsetNomeAutor(StringnomeAutor){this.nomeAutor=nomeAutor;}publicstaticStringlistaAutorComMaisObras(List<Livro>livros){Map<String,Integer>contaLivrosDoAutor=newHashMap<String,Integer>();for(Livrolivro:livros){StringnomeAutor=livro.getNomeAutor();if(!contaLivrosDoAutor.containsKey(nomeAutor)){contaLivrosDoAutor.put(nomeAutor,0);}contaLivrosDoAutor.put(nomeAutor,contaLivrosDoAutor.get(nomeAutor)+1);}//Vê qual autor teve mais livrosStringlivro=null;intcount=0;for(Map.Entry<String,Integer>contagemAutor:contaLivrosDoAutor.entrySet()){if(contagemAutor.getValue()>count){livro=contagemAutor.getKey();count=contagemAutor.getValue();}}returnlivro;}