Problemas para copiar um Vector e para Ordenar

2 respostas
R

Saudações,

Estou na reta final do meu trabalho da faculdade que é para amanhã.
O trabalho é sobre cadastro de municipios.
Um Municipio tem o nome, area, população renda e ainda:
Possui vizinhos (diversos)
Perfil ( que são 3 , turistico, comercio e industrias ( varios).

As classes ficaram assim:
Uma classe Municipios que é vector da classe municipio que dentro dela além das propriedades nome, area,… possui as classes:

-Uma classe vizinhos que é vector da classe vizinho.
-Uma classe Perfil que tem como objetos:
-Uma classe turismo.
-Uma classe comercio.
-Uma classe Industriais que é vector da classe industria.

O programa le as informação de um arquivo texto, carrega a classe Municipios e tem funções de incluir, alterar deletar, mostrar o de maior area, maior renda e etc. E depois grava a saida para o arquivo de entrada
Até aqui já funciona…

Agora tenho que fazer 3 relatorios que seria ordenar os Municipios por
Area (ordenar crescente)
Renda (ordenar decrescente)
E pela maior quantidade de Industrias para os municipios que possuem o perfil industria (ordenar crescente)

E depois gravar a saida em um arquivo. Um arquivo para cada relatorio.

Então pensei o seguinte crio 3 copias de Municipios uma copia para cada relatorio e dentro de Municipios 3 metodos. Cada com a sua ordenação (Area, Renda, e Qtde Industrias).

Assim ficaria
Municipios relatorioA = New Municipios(municipios);
Obs: municipios é o objeto já carregado com os municipios. E este não é para ser alterado.

Construtores do Municipios

public Municipios(){

}
	
public Municipios(Municipios m){
   int i=0;
   int tam=m.sizeMunicipio()-1;				
   while (i<tam){			
       adicionarMunicipio(m.getMunicipio(i));			
       i++;
   }		
}

Tenho 2 construtores pois um seria para criar objeto sem copia, e o outro para criar com a copia.
O metodo adiciona municipio ele recebe o objeto munipio já carregado e adiciona na lista que é um vector.

public void adicionarMunicipio (Municipio m){
   lista.add(m);
}

Até aqui acho que foi.

Agora dentro de Municipio tem o metodo que ordena a lista(vector) para um tipo de relatorio que seria o em ordem crescente pela area. Estou usando o metodo da BOLHA ( sei que é ruim mas é mais facil)

Então pensei assim

Municipios relatorioA = New Municipios(municipios);

relatorioA.orderByAscPorArea();

Logo criei uma copia e mandei ordenar a copia.
Depois tem um metodo em Municipios que grava no arquivo

relatorioA.saveArqMunicipio(relatorioA.txt);

municipios.saveArqMunicipio("ArquivoEntrada.txt);

Grava o relatorio ordenado e grava o arquivo original modificado se for o caso pelas outras propriedades adicionar, deletar e alterar(funcionando já).

Bem ai começa todos os problemas.

  1. Quando chamo relatorioA.orderByAscPorArea() ele também altera o objeto municipio pois o arquivo ArquivoEntrada.txt e relatorioA.txt são iguais. E mando imprimir na tela municipio e ele é alterado. Logo a copia não esta certa.
  2. Ele até ordena mas repete os registros
    Se no arquivo original eu tenho a ordem Saquarema, CaboFrio, Araruama
    No arquivo relatorio ele ordenada certo mas duplica menos o primeiro
    Araruama,CaboFrio,CaboFrio,Saquarema,Saquarema.

Acho que a propriedade lista.set(i,objeto) não funciona da forma que pensava. Não sei realmente o que acontece. O problema que não sei nada de JAVA aprendi nessa ultima semana. Se alguem puder me dar uma luz.

OBS:
1)Não tenho como mudar a estruturas das classes pois o trabalho esta feito e foi a professora que colocou como tinha que ser o modelo das classes.
2) É obrigado a usar o Vector não pode ser de outra forma, restrição da professora.

Procurei no Forum sobre Copia e fiz pelo que li aqui, tem uma outra forma que seria o Clone mas não consegui usar.
Pois dentro de Municipios tem uma variavel lista (Vetor) e para usar o clone teria que ser um metodo em Municipios que fizesse o clone da lista mas que retorna-se Municipio, fiz assim
return (Municipios).lista.Clone(); Ele até compilou mas na execução deu pau.

OBRIGADO quem puder me ajudar nessa hora de desespero… :cry: :shock: :shock: :shock: agradeço. Se puderem ser especificos na ajuda é melhor pois estou engatinhando no JAVA

2 Respostas

F

Vai na API do J2SE e lê rapidinho sobre TreeSet e Comparable que você vai aprender uma maneira bem melhor e mais facil de fazer isso.

R

GALERA A ORDENAÇÃO ESTA FUNCIONANDO BELEZA
se eu colocar
municipios.orderByAscPorArea(); Fica certinho não duplica e ordena na moral.

O problema mesmo é quando crio a copia de municipio ai ferra tudo. Então o problema agora é só criar a cópia.

Criado 3 de janeiro de 2005
Ultima resposta 3 de jan. de 2005
Respostas 2
Participantes 2