O erro pode estar na linha 15 do Cromossomo.as:

A linha abaixo é um loop for, mas o array _gene está sendo usado sem o [i].
_gene = _gene + Math.round(Math.random()).toString();

OU

Seu problema provavelmente acontece porque no flash, os valores são sempre
passados por referência...

Experimenta usar variavel_destino = ObjectUtil.copy(variavel_a_ser_copiada).

(o nome é algo parecido com copy, se o acime estiver errado.)

2008/4/14 Beck Novaes <[EMAIL PROTECTED]>:

>
> Hm... dei uma olhada no seu código mas achei um tanto complicado. Você
> suspeita que está ocorrendo um "vinculo entre os campos do array com
> os mesmos valores" não é? Será que você poderia abstrair do seu
> negócio específico com Genes e Cromossomos e se voltar apenas para os
> Arrays, campos e valores para que possamos validar ou não a sua
> hipótese? Ou seja, teria como você preparar um exemplo funcionando com
> o problema o mais simples possível para darmos uma olhada?
>
> []'s
> Beck Novaes
>
> On 14 abr, 21:44, Alexandre Souza <[EMAIL PROTECTED]> wrote:
> > Abaixo está o código completo (mas ineficiente :c).
> > Eu criei uma nova versão, não orientado a objetos desta vez (Amazeno
> > no array o string diretamente). E mesmo assim, ocorre esse "vinculo"
> > entre os campos do array com os mesmos valores. Estou achando que é
> > algo mais grave do que eu pensei. Compilei usando o Flex builder 2 e
> > 3, mas o resultado é o mesmo
> >
> > //Cromossomo.as
> > package
> > {
> >         public class Cromossomo
> >         {
> >                 private var tamCromossomo:uint = 1;
> >                 private var gene:Array = ["0"];
> >                 private var i:Number = 0;
> >
> >                 public function Cromossomo(tam:uint):void{
> >                         tamCromossomo = tam;
> >                         for (i=0; i<tam; i++){
> >                                 gene[i]= "0";
> >                         }
> >                         for (i=0; i<tam; i++){
> >                                 _gene = _gene +
> Math.round(Math.random()).toString();
> >                         }
> >                         //trace(gene);
> >                 }
> >
> >                 public function getGene(inicio:uint,fim:uint):String{
> >                         var juncao:String = gene.join();
> >                         //Uso de expressões regulares para retirada da
> vírgula
> >                         var pattern:RegExp = /,/gi;
> >                         var resultado:String = juncao.replace(pattern,
> "");
> >                         return resultado.substring(inicio,fim);
> >                         return _gene;
> >                 }
> >
> >                 public function setGene(novoString:String):void{
> >                         this._gene = novoString;
> >                 }
> >
> >                 public function mutaGene(teste:String):void{
> >                         do{
> >                                 var
> posicao:uint=Math.round(Math.random()*tamCromossomo-1);
> >                                 var mutado:String;
> >
> >                                 if (_gene.charAt(posicao) == "0"){
> >                                         mutado = "1";
> >                                 } else {
> >                                         mutado = "0";
> >                                 }
> >                         } while (posicao == 4294967295);
> >
> >                         _gene = _gene.substring(0,posicao-1) + mutado +
> > _gene.substring(posicao+1,tamCromossomo-1);
> >                 }
> >         }
> >
> > }
> >
> > //Populacao.as (O trecho inicial)
> > package
> > {
> >         public class Populacao
> >         {
> >                 import mx.controls.Alert;
> >                 import mx.core.Application;
> >
> >                 private var individuos:Array;
> >                 private var censo:uint;
> >                 private var selecao:String;
> >                 private var taxaMutacao:Number;
> >                 private var tipoCross:String;
> >                 private var tamGene:uint;
> >                 private var valorSoma:Number;
> >                 private var valorMult:Number;
> >                 private var limiteSuperior1:uint = 0;
> >                 private var limiteSuperior2:uint = 1;
> >                 private var finalizado:Boolean = false;
> >                 private var Resultado:Array = new Array();  //+
> > (etapa,gene,avaliacao)
> >                 private var limite:uint;
> >                 private var tipoProblema:uint;
> >                 private var etapa:uint;
> >
> >                 public function
> >
> Populacao(numero:uint,tam:uint,soma:Number,mult:Number,problema:uint):void{
> >                         censo = numero;
> >                         individuos = new Array(numero);
> >                         tamGene = tam;
> >                         valorSoma = soma;
> >                         valorMult = mult;
> >                         tipoProblema = problema;
> >                         Genesis(problema);
> >                 }
> >
> >                 private function Genesis(problema:uint):void{
> >                         var i:int;
> >                         var avaliacao:Number;
> >                         for (i=0; i<censo; i++){
> >                                 var crom:Cromossomo = new
> Cromossomo(tamGene);
> >                                 trace("Gene nº "+i.toString());
> >                                 switch (problema){
> >                                         case 1  :       avaliacao =
> avalia1(crom.getGene(0,tamGene));
> >                                                                 break;
> >                                         case 2  :       avaliacao =
> avalia2(crom.getGene(0,tamGene));
> >                                                                 break;
> >                                         case 3  :       avaliacao =
> avalia3(crom.getGene(0,tamGene));
> >                                                                 break;
> >                                 }
> >                                 individuos[i] = [crom,avaliacao];
> >                                 if (avaliacao == Infinity){
> >                                         etapa = 0;
> >                                         Resultado[etapa] =
> [etapa,crom.getGene(0,tamGene),avaliacao];
> >                                         finalizado = true;
> >                                 }
> >                         }
> >                         //MostrarPop(individuos);
> >                 }
> >
> > .......
> >
> > }
> >
>

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a