Bom dia, será que podem me ajudar?
Quero fazer um array que pegue um valor digitado por um usuário e passe pelo for uma vez a menos digitado pelo usuario. E depois fazer as perguntas para o usuario preencher conforme os dados do livro. Estes dados serão inseridos através do setIsbn(), setTitulo(), setAutor() e setQuantidadeDePaginas(). Quando rodo o sistema ele informa um erro dizendo que tentou receber um dado mas não encontrou nenhum argumento. O que pode ser isso? Como faço para resolver?
[code]Short quantidadeDeLivros = Short.parseShort(JOptionPane.showInputDialog("Digite a quantidade de livros que deseja salvar: "));
Livro[] livros = new Livro[quantidadeDeLivros];
for(int i=0; i<quantidadeDeLivros; i++){
livros[i].setIsbn() = Integer.parseInt(JOptionPane.showInputDialog( "Digite o ISBN: "));
livros[i].setTitulo() = JOptionPane.showInputDialog( "Digite o titulo do livro: ");
livros[i].setAutor() = JOptionPane.showInputDialog( "Digite o nome do autor: ");
livros[i].setQuantidadeDePaginas() = Short.parseShort(JOptionPane.showInputDialog( "Digite a quantidade de paginas: "));
}[/code]
[quote=Scobar20]Bom dia, será que podem me ajudar?
Quero fazer um array que pegue um valor digitado por um usuário e passe pelo for uma vez a menos digitado pelo usuario. E depois fazer as perguntas para o usuario preencher conforme os dados do livro. Estes dados serão inseridos através do setIsbn(), setTitulo(), setAutor() e setQuantidadeDePaginas(). Quando rodo o sistema ele informa um erro dizendo que tentou receber um dado mas não encontrou nenhum argumento. O que pode ser isso? Como faço para resolver?
[code]Short quantidadeDeLivros = Short.parseShort(JOptionPane.showInputDialog("Digite a quantidade de livros que deseja salvar: "));
Livro[] livros = new Livro[quantidadeDeLivros];
for(int i=0; i<quantidadeDeLivros; i++){
livros[i].setIsbn() = Integer.parseInt(JOptionPane.showInputDialog( "Digite o ISBN: "));
livros[i].setTitulo() = JOptionPane.showInputDialog( "Digite o titulo do livro: ");
livros[i].setAutor() = JOptionPane.showInputDialog( "Digite o nome do autor: ");
livros[i].setQuantidadeDePaginas() = Short.parseShort(JOptionPane.showInputDialog( "Digite a quantidade de paginas: "));
}[/code]
Obrigado>[/quote]
Então, pelo o que eu acho, você deveria passar os dados digitados pelo usuário como argumentos para os seus métodos set,
int isbn = Integer.parseInt(JOptionPane.showInputDialog( "Digite o ISBN: ");
livros[i].setIsbn(isbn);
[quote=pmlm]Quando fazes isto Livro[] livros = new Livro[quantidadeDeLivros]; estás a dizer que vais ter um array de livros mas ainda não tens nenhum livro.
Dentro do for, deves inicializar cada livro antes de fazer os set: livros[i] = new Livro();[/quote]
Tentei fazer como você me informou, mesmo assim não funcionou.
[quote=pmlm]Quando fazes isto Livro[] livros = new Livro[quantidadeDeLivros]; estás a dizer que vais ter um array de livros mas ainda não tens nenhum livro.
Dentro do for, deves inicializar cada livro antes de fazer os set: livros[i] = new Livro();[/quote]
Aproveitando, poruqe não utiliza um List? fica muito mais fácil e ágil de se manipular:
List<Livro> livros = new ArrayList<Livro>();
for(int i=0; i<quantidadeDeLivros; i++){
Livro livro = new Livro();
livro.setIsbn(Integer.parseInt(JOptionPane.showInputDialog( "Digite o ISBN: ")));
livro.setTitulo(JOptionPane.showInputDialog( "Digite o titulo do livro: "));
livro.setAutor(JOptionPane.showInputDialog( "Digite o nome do autor: "));
livro.setQuantidadeDePaginas(Short.parseShort(JOptionPane.showInputDialog( "Digite a quantidade de paginas: ")));
livros.add(livro);
}
[quote=ErickRAR]você também tem que instanciar cada livro dentro do array.
O set serve para você passar um valor, então é necessário um parametro.Ficaria assim:
for(...
livros[i] = new Livro();
livros[i].setIsbn Integer.parseInt(JOptionPane.showInputDialog( "Digite o ISBN: ")));
...
[quote=guilherme.dio][quote=pmlm]Quando fazes isto Livro[] livros = new Livro[quantidadeDeLivros]; estás a dizer que vais ter um array de livros mas ainda não tens nenhum livro.
Dentro do for, deves inicializar cada livro antes de fazer os set: livros[i] = new Livro();[/quote]
Aproveitando, poruqe não utiliza um List? fica muito mais fácil e ágil de se manipular:
[code]
List livros = new ArrayList();
for(int i=0; i<quantidadeDeLivros; i++){
Livro livro = new Livro();
livro.setIsbn(Integer.parseInt(JOptionPane.showInputDialog( "Digite o ISBN: ")));
livro.setTitulo(JOptionPane.showInputDialog( "Digite o titulo do livro: "));
livro.setAutor(JOptionPane.showInputDialog( "Digite o nome do autor: "));
livro.setQuantidadeDePaginas(Short.parseShort(JOptionPane.showInputDialog( "Digite a quantidade de paginas: ")));
livros.add(livro);
}
[/code][/quote]
Então eu to aprendendo java ainda sabe…e até agora somente aprendi com o set, logo aprenderei o list e o usarei para meus futuros projetos… XD
[quote=entanglement]Comentário: ainda acho que setters e getters são uma coisa “do mal”.
São uma das coisas que confundem a cabeça dos iniciantes em Java.
Eu digo que é mais simples, para um iniciante, tornar o atributo público, ou então aprender C# e usar uma property
Se há um atributo em uma classe, por que é que eu tenho de usar um par de métodos para acessá-lo? Muito burocrático para o meu gosto. [/quote]
Eu geralmente só uso getter e setter quando eu preciso que um atributo só possa ser modificado (ou acessado) de uma determinada forma (não só colocar um valor qualquer no setter e ele aceitar).
[quote=entanglement]Comentário: ainda acho que setters e getters são uma coisa “do mal”.
São uma das coisas que confundem a cabeça dos iniciantes em Java.
Eu digo que é mais simples, para um iniciante, tornar o atributo público, ou então aprender C# e usar uma property
Se há um atributo em uma classe, por que é que eu tenho de usar um par de métodos para acessá-lo? Muito burocrático para o meu gosto. [/quote]
Acredito que seja também parte da convenção do Java para programar, assim como nome de classes devem começar com letras maiúsculas, métodos com letras minúsculas, interfaces devem ser nomeadas a partir de sua ação, pacotes devem ser nomeados com o nome da empresa e do projeto, o codigo deve possuir um src folder para testes e um para desenvolvimento…e assim vai.