Organizar um Vector com arrays

2 respostas
C

Olha tenho um vector, tenho q colocar os elementos iguais em um array e por em outro vector, e assim por diante, toda vez que o elemento do primeiro vector mudar, terá q ser criado um novo array, porém não sei onde criar esse array, me ajudem, pq no código que eu criei ele adiciona o array, mas toda vez q eu mudo o array todos os arrays adicionados no outro vector mudam, ficam iguais!

public Cromossomo(Vector V, Vector P) {
        cromo = new Vector();
        cromo2 = new Vector();
        Vector aux = new Vector();
       
        int dado[] = new int[3]; 
        int dado2[] = new int[3];
      
        for(int cont=0; cont< V.size(); cont++){
        dado = (int[]) V.elementAt(cont);
        
        if(cont>0)
           dado2 = (int[]) V.elementAt(cont-1);
        else
        dado2 = dado; 
        
        if(dado[0]==dado2[0])
        {
           for(int conta=0; conta< dado[2]; conta++){   
           int coluna = (int) (Math.random()*25);
        
           if(conteudo[0][coluna]!= 0)
               conta--;
           else 
             conteudo[0][coluna] = dado[1];
             
          }
          if(cont==(V.size()-1))
              cromo2.add(conteudo);
        }
        else{
            cromo2.add(conteudo); 
            for(int p=0; p<25; p++){
                conteudo[0][p] = 0;
           }
         }
       }

2 Respostas

J

Não entendi o teu código direito (pra que serve o Vector P? pra que serve cromo? o que é conteudo? ). Se vc puder desenvolver mais a tua explanação seria melhor … Mas mesmo assim vale algumas observações:

  1. Tente utilizar interfaces ao invés de implementações concretas na assinatura dos teus métodos. Assim vc não amarra muito o teu código a uma implementação específica. No teu caso ao utilize, por exemplo:
public Cromossomo(List V, List P)
  1. O Vector meio que virou código legado, assim como o Hashtable. Eles ainda fazem parte da biblioteca, é claro, mas os programadores tem dado preferência a ArrayList e HashMap. Mas vale um aviso: estes que eu citei não são Thread-safe (synchronized), portanto, se vc precisar trabalhar com listas sincronizadas por dar preferência pra uma Collection.synchronizedList(lista).

Por fim, pq vc precisa por os elementos iguais em um outro array e depois em um vetor? Não bastaria por somente em outro vetor?

sergiotaborda

carllacj:
Olha tenho um vector, tenho q colocar os elementos iguais em um array e por em outro vector, e assim por diante, toda vez que o elemento do primeiro vector mudar, terá q ser criado um novo array, porém não sei onde criar esse array, me ajudem, pq no código que eu criei ele adiciona o array, mas toda vez q eu mudo o array todos os arrays adicionados no outro vector mudam, ficam iguais!

Java é orientado a objetos : use isso a seu favor. O que raios é um array de três posições ? Esse “dado” o que é ?
É um ponto ? um alelo ? uma base ? o que é ? Crie uma classe para isso. Coloque o array de três posições dentro dessa novo objeto.
Depois use List e não Vector.

Ficaria assim

// vou chamar ponto porque não sei o que é
public class Ponto  {

    private int[] array;

    public boolean equals(Object other){
         return other instanceof Ponto && equals((ponto)other);
    }

    public boolean equals(Ponto other){
        return array[0]==other.array[0] && array[1]==other.array[1] && array[2]==other.array[2];
    }

}

// encontra elementos de A que existem em B
public List retornaDuplicados (List a, List b){
         List aux = new ArrayList(a); // copia A
         aux.retainAll(b); elimina todos os elementos de A que não estejam em B
         return aux;// contém os elementos de A que existem em B
}

não sei se é isto que pretende porque não entendi o seu codigo, mas tente usar as funcionalidades
que o java já tem e crie classes para representar o conceitos com que está trabalhando.

Criado 5 de janeiro de 2008
Ultima resposta 5 de jan. de 2008
Respostas 2
Participantes 3