Ver Mensaje Individual
  #1  
Antiguo 22-02-2008
quilaztli quilaztli is offline
Registrado
 
Registrado: feb 2008
Posts: 1
Reputación: 0
quilaztli Va por buen camino
Problemas al extraer un elemento de ArrayList, se modifica solo???

Hola a todos, estoy haciendo un programa en el que necesito crear un vector de ArrayList. Lo que hice fue crear una clase llamada cosaContainer que tiene un arrayList y dos metodos(Add y Get), que se encargan de incluir y regresarme el valor de arrayList en un indice dado. Los objetos que almaceno en cosaContainer son de tipo "cosa. "Cosa" tiene un entero y 2 metodos: crea, y vecino, este ultimo metodo, multiplica el entero por 2.

Lo que yo necesito es crear una primera instancia cosa y almacenarla en el cosaContainer y después extraer ese objeto y con él llamar a la función vecino, para agregar al vecino a mi cosaContainer. ¿Me explico? El problema es que al extraer del arrayList() el objeto padre( por asi decirlo), modifica también mi objeto original. Es decir si tengo el array[2,4] y pido el primer valor del array para aplicarle el método vecino, que solo hace la multiplicacion ( v=get(0) ; v.vecino me hace esto v=4 y el vector[4,4]. ¿Me explico?

¿Como puedo hacer para que no me modifique el valor ORIGINAL del arrayList?Les pongo mi codigo.

GRACIAS

--------------------------------------------------------------------------------------------------------------------

public class cosa
{
int numO;

public void vecino() {
this.numO = this.numO * 2;
}

public cosa crea() {
Random r = new Random();
numO = r.Next(10);
return this;
}
}

-----------------------------------------------------------------------------------------------------------------------------

public class solutionContainer
{
public int count;
public ArrayList list= new ArrayList();

public solutionContainer() {
list = new ArrayList();
count = 0;
}

public void add(cosa s) {
list.Add(s);
list[count] = s;
count++;
}

public cosa Get(int index) {
Array nlist = (Array)list.ToArray().Clone();
return (cosa)nlist.GetValue(index);
}

----------------------------------------------------------------------------------------------------------

//Creo mi arreglo

solutions = new solutionContainer[5];
for (int j = 0; j < 5; j++)
solutions[j] = new solutionContainer();

//Creo los primeros valores de cosa y los almaceno en mi vector

cosa s=new cosa();
for (int j = 0; j < 5; j++){
Random r = new Random();
s = s.crea();
solutions[j].add(s);
}

//Creo el vecino y me modifica el OBJETO ORIGINAL!!!!!!

for (int j = 0; j < 5; j++)
{
s = solutions[j].Get(0);
s.vecino();
solutions[j].add(s);
}
Responder Con Cita