[Resolvido]duvida de como usar array com variavel

14 respostas
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?

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: "));
		}

Obrigado>

14 Respostas

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();

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: "))); 
...
M
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?
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: "));
		}

Obrigado>

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);
Scobar20

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();

Tentei fazer como você me informou, mesmo assim não funcionou.

M

E também tem isso que o brother acima falou:)

Criar um Livro para cada índice do array

guilherme.dio

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();

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);
            }
pmlm

Porque, como já alguém disse e eu ainda nem tinha reparado, os set estão mal.

Scobar20

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: "))); 
...

Funcionou certinho cara, brigado…

Scobar20
guilherme.dio:
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();

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);
            }

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

E

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 :slight_smile:

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.

S

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 :slight_smile:

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.

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).

rmendes08

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 :slight_smile:

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.

taí uma coisa que eu acho que eu acho que seria boa no Java. Será que já não existe uma JSR para isso ?

ErickRAR

Esse assunto me deixou com uma dúvida: E no caso do hibernate, que precisa ter set e get?

Esquece, já vi que pode deixar o set como private

guilherme.dio

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 :slight_smile:

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.

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.

Criado 5 de julho de 2012
Ultima resposta 5 de jul. de 2012
Respostas 14
Participantes 8