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.
- 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.
- 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…
:shock: :shock: :shock: agradeço. Se puderem ser especificos na ajuda é melhor pois estou engatinhando no JAVA