[Resolvido]duvida de como usar array com variavel

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>

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

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

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

Criar um Livro para cada índice do array

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

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

[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]

Funcionou certinho cara, brigado…

[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

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.

[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 :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. [/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 :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. [/quote]

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

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

[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 :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. [/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.