Array de Objtetos

E ai galera, preciso de uma ajuda… :? :?:

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!

OK?
Qualquer coisa Grita!!!

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.

Claudio Gualberto.
SCJP 2 1.4

 }
 ...