Sou bem novo em java, e estou fazendo um trabalho pra facul, ou melhor um programa. Um um programa de estoque, e basicamente ele faz cadastro do itens, listar os itens, atualizar estoque após uma venda…
Encontro dificuldades no seguinte:
Criei a classe ItensEstoque onde existe todos o atributos e métodos set’s e get’s.
No principal, criei dois objetos:
ItensEstoque Itens = new ItensEstoque();
ItensEstoque[] ArrayItens = new ItensEstoque[10]
Para inlcuir um item, por exemplo nome:
Itens.setNome(“Fulano”) e depois jogo no ArrayItens[0] = Itens
Mas quando vou buscar todos os itens que inlcui, ele apenas me motra o ultimo, ou seja, se inclui 10 nomes e o ultimo foi Fulano ele me mostra 10x Fulano…
Não sei se esses informações ajudam, caso alguem se disponibilize a ajudar, mando o codigo fonte. :lol:
manda a parte do codigo onde instancia o ItensEstoque, onde vc usa o setNome e onde joga ele no array!
E outra coisa, o numero de elementos no vetor é fixo, todas as vezes q vc for rodar o programa vc vai precisar de um vetor de 10 ou vc colocou um número grande para nunca estourar?
pq se for o ultimo caso o correto e vc usar a classe Vector!
todos objetos em Java são alocados dinamicamente na memória, oq significa q quando vc cria um objeto
ItensEstoque Itens = new ItensEstoque();
vc esta criando uma variavel Itens que funciona como um ponteiro apontando para uma área na memoria onde o novo objeto ItensEstoque foi alocado, portanto quando vc usa
Itens.setNome(“Fulano”)
vc esta alterando o objeto q esta sendo apontado pela variavel Itens.
Quando vc faz
ArrayItens[x] = Itens
vc n esta jogando o objeto para a variavel ArrayItens[x], está apenas fazendo que ArrayItens[x] aponte para o mesmo objeto q Itens.
No seu programa vc instancia um objeto no inicio
ItensEstoque Itens = new ItensEstoque();
depois vc trabalha sempre com este objeto. Oq esta acontecendo é o seguinte:
1- Vc cria um objeto e ele é referenciado pela variavel Itens:
ItensEstoque Itens = new ItensEstoque();
2- Vc modifica os atributos do objeto referenciado pela variavel Itens:
Itens.setNome(“Fulano”)
3- Vc passa a referencia a este objeto para a variavel ArrayItens[0]:
ArrayItens[0] = Itens
*(agora vc tem 2 variaveis apontando para o mesmo objeto, Itens e ArrayItens[0])
Esse é o ciclo basico do seu programa, oq acontece é q em uma próxima interação do loop vc vai direto para o passo 2, portanto vc esta alterando as propriedades do mesmo objeto, depois vc passa a mesma referencia para ArrayItens[1,2…n], isso faz com q todos itens do seu array apontem para o mesmo objeto.
Para resolver isso basta vc trocar a linha
ItensEstoque Itens = new ItensEstoque();
por
ItensEstoque Itens;
Com isso vc cria a variavel q vai apontar para um objeto ItensEstoque mas n cria nenhum objeto;
então antes da 1ª linha do loop que utiliza o objeto como
Itens.setNome(“Fulano”)
vc coloca
Itens= new ItensEstoque();
isso vai sempre criar um novo objeto e fazer a variavel apontar para ele,
ai no final do loop quando vc faz ArrayItens[x]= Itens, vc vai estar passando para ArrayItens[x] este novo objeto!
Geralmente estes programas para faculdade são simplistas, assim como limitar a quantidade de produtos ou itens, mas no mundo real vc deveria usar alguma estrutura de dado que suporte tamanhos dinamicos, seria bom vc dar uma olhada no pacote java.util e estudar as classes da “Collections framework”.
Ficaria algo assim :
...
List produtos = new ArrayList();
while( temProdutos )
{
Produto item = new Produto();
.... usa os metodos set de Produtos para configurar a instancia...
produtos.add( item ); // acrescenta à lista.
}
Considere esta opção.