Problemas ao passar valores para uma ArrayList

2 respostas
J

Olá pessoal, estou tendo problemas para utilizar ArrayLists, já pesquisei sobre meu erro e não encontrei nada parecido. O meu problema se refere às seguintes classes:

import java.util.ArrayList;


public class Ambiente {
	
	private Matriz dados;
	
	
	public ArrayList<Cromossomo> populacao = new ArrayList<Cromossomo>();
	public ArrayList<Cromossomo> popIntermediaria = new ArrayList<Cromossomo>();
	public Cromossomo cromossomo =  new Cromossomo();
	private CromossomoFitness fitness = new CromossomoFitness();
	
	public Ambiente(Matriz matriz){
		dados = matriz;				
	}	
	
public void gerarPopulacao(){
	
	for(int i = 0; i < dados.populacao; i ++){
		for(int j = 0; j < 22; j ++){			
			cromossomo.locus[j] = dados.matriz[i][j];
		}
		cromossomo.fitness = fitness.fitness_funcao(cromossomo.locus);
		
		cromossomo.id = i;	
		populacao.add(cromossomo);			
	}
}
public class Cromossomo {
	
	
	public int[] locus = new int [22];
	public int id;
	public float fitness;
		
	public Cromossomo(){
		
	}

    public Cromossomo(Cromossomo cromo) {
        this.fitness = cromo.fitness;
        this.id = cromo.id;
        this.locus = cromo.locus.clone();
    }
                
}

Acontece que quando eu acrescento o segundo valor no ArayList o primeiro esta sendo sobrescrito, e todo valor que é armazenado sobrescreve os anteriores, assim quando eu termino de preencher o ArrayList todos os valores são iguais ao último inserido.

Se alguém puder me ajudar eu ficaria muito grato :D

2 Respostas

T

Troque

public Cromossomo cromossomo =  new Cromossomo();

por

public Cromossomo cromossomo;

e

for(int i = 0; i < dados.populacao; i ++){  
         for(int j = 0; j < 22; j ++){              
             cromossomo.locus[j] = dados.matriz[i][j];  
         }  
         cromossomo.fitness = fitness.fitness_funcao(cromossomo.locus);  
           
         cromossomo.id = i;    
         populacao.add(cromossomo);            
     }

por

for(int i = 0; i < dados.populacao; i ++){  
         cromossomo = new Cromossomo();
         for(int j = 0; j < 22; j ++){              
             cromossomo.locus[j] = dados.matriz[i][j];  
         }  
         cromossomo.fitness = fitness.fitness_funcao(cromossomo.locus);  
           
         cromossomo.id = i;    
         populacao.add(cromossomo);            
     }
J

Obrigado thingol, agora está funcionando tudo certinho.

Criado 29 de julho de 2009
Ultima resposta 29 de jul. de 2009
Respostas 2
Participantes 2