Problemas con ArrayList, se se modifica solo???
Publicado por quilaztli (1 intervención) el 22/02/2008 07:27:10
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);
}
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);
}
Valora esta pregunta


0