Todos os objetos em Java são referencias.
Referencia = ponteiro bem comportado
Quando voce coloca um objeto dentro de um vetor, voce esta colocando sua
referencia e nao uma copia dele.
No seu segundo loop (for) voce utiliza novamente os objetos que já foram
introduzidos no vetor no primeiro loop (while).
Quando voce modifica o valor deles, automaticamente voce esta modificando o
objeto que esta dentro do vetor. As referencias são iguais, apontam para o
mesmo objeto.
Apenas variaveis primitivas em Java sao passadas por copia. Todo o resto eh
passado por referencia.
[]s
Sergio
>From: valter vieira de camargo <[EMAIL PROTECTED]>
>Reply-To: [EMAIL PROTECTED]
>To: [EMAIL PROTECTED]
>Subject: [java-list] problemas com Vector. URGENTE!!!!!
>Date: Tue, 27 Mar 2001 16:17:06 -0300
>
>Pessoal, coloquei em attach um método que estou tendo problemas.... Ele
>carrega um vetor corretamente mas na hora de retorná-lo ocorrem algumas
>alterações.
>Coloquei vários comentários para auxiliar no compreendimento do
>método.... por favor dêem uma olhada.... estou com urgência disso e não
>consigo resolver o problema....
>
>
>
>[]'s Valter
>O problema que está acontecendo é o seguinte: Dentro do for, o vetor é
>carregado corretamente,
>com três objetos do tipo Fornecimento. Eu sei disso por que já testei.
>Quando o for acaba e
>vai dar o "return vetor" o conteúdo do vetor já não é mais o mesmo !!!
>
>Explicando melhor: Depois da última repetição do for, o primeiro objeto
>fornecimento do vetor,
>possui um fornecedor de código 1, o segundo um fornecedor de código 2 e um
>terciro fornecedor de
>código 3. Se eu mandar imprimir os códigos dos fornecedores fora do "for",
>isto é,
>uma linha antes dele retonar (return) aparecerá que o primeiro objeto
>fornecimento do vetor
>possui código 2 ! o segundo código 3! e o terceiro também código 3 !!!
>
>
>
> public Vector SetObject2(ResultSet rsFornec)
> {
> Vector vetor = new Vector();
> try
> {
> // inicio da declaração das variáveis necessárias
>
> int material;
> Vector vectorFornecedor = new Vector();
> Vector vectorMaterial = new Vector();
> Vector vectorDataFornecimento = new Vector();
> Integer codFornecedor;
> Integer codMaterial;
> int codMaterialI;
> int codFornecedorI;
> String dataFornecimento;
> CodigoFornecimento codigoFornecimento;
> Fornecimento fornecimento1;
> material material1 = new material();
> Fornecedor fornecedor1 = new Fornecedor();
> ResultSet rsMaterial;
> ResultSet rsFornecedor;
>
> // final da declaração das variáveis necessárias
>
> int i = 0;
>
> // while responsável por criar tres vetores. Um com o codigo dos
>fornecedores, outro
> // com o código dos materiais e outro com a data de fornecimento.
>Tudo pego do resultSet
> // que chegou como parâmetro.
>
> while (rsFornec.next ())
> {
> codFornecedor = new Integer(rsFornec.getInt ("fornecedor"));
> codMaterial = new Integer(rsFornec.getInt ("material"));
> vectorMaterial.addElement (codMaterial);
> vectorFornecedor.addElement (codFornecedor);
> vectorDataFornecimento.addElement (rsFornec.getString
>("dataFornecimento"));
>
> }
>
>
> // o objetivo do for é criar um vetor de objetos do tipo
>Fornecimento. O objeto do tipo
> // fornecimento é formado por um objeto do tipo CodigoFornecimento e
>uma String dataFornecimento.
> // o objeto do tipo CodigoFornecimento é formado pelos objetos
>Material e Fornecedor.
> // sendo assim, primeiro eu carrego um objeto fornecedor, depos um
>material, crio o objeto
> // codigoFornecimento e crio um objeto Fornecimento. E em seguida
>adiciono no vetor. O for
> // repete esta ação para todos os elementos do vetor de codigos de
>fornecedor criado no while
> // anterior.
>
> for (int cont = 0; cont < vectorFornecedor.size (); cont++)
> {
> codFornecedor = (Integer)vectorFornecedor.elementAt(cont);
> codMaterial = (Integer)vectorMaterial.elementAt (cont);
> codMaterialI = codMaterial.intValue ();
> codFornecedorI = codFornecedor.intValue ();
> dataFornecimento = (String)vectorDataFornecimento.elementAt
>(cont);
> fornecedor1.setCodigo (codFornecedorI);
> rsFornecedor = null;
> rsFornecedor = fornecedor1.findlike ();
> // o método findlike procura esse objeto no banco e joga os
>dados em um RS.
>
> if (rsFornecedor.next ())
> {
> fornecedor1 = fornecedor1.SetObject (rsFornecedor);
> // o método SetObject pega os dados do rs passado e
>cria um objeto
> }
>
> material1.setCodigo (codMaterialI);
> rsMaterial = null;
> rsMaterial = material1.findlike ();
> if (rsMaterial.next ())
> {
> material1 = material1.SetObject (rsMaterial);
> }
>
> codigoFornecimento = new
>CodigoFornecimento(material1,fornecedor1); //cria objeto codigoFornecimento
> fornecimento1 = new Fornecimento(codigoFornecimento,
>dataFornecimento); // cria objeto Fornecimento
> vetor.insertElementAt (fornecimento1,cont); adiciona elemento
>no vetor
>
> // se eu mandar imprimir aqui está tudo certo...
> }
>
> // Se eu mandar iprimir aqui ele já trocou tudo...
> return vetor;
> }
> catch (Exception e)
> {
> return null;
> }
> }
>
>------------------------------ LISTA SOUJAVA ----------------------------
>http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
>dúvidas mais comuns: http://www.soujava.org.br/faq.htm
>regras da lista: http://www.soujava.org.br/regras.htm
>para sair da lista: envie email para [EMAIL PROTECTED]
>-------------------------------------------------------------------------
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------