![]() |
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); } |
En .Net ¿no existe el TList y TObjectList?
Esas 2 clases ya incorporan lo que estas haciendo, te puede ser más libiano. De todas formas, intentando ayudar sin tener demasiada experiencia en C. Quizás el problema esté aquí: Creo que ahí estás devolviendo un puntero, por ello te modifica el original. La primera línea no la entiendo, parece que clonas el array, pero lo que deberías clonar sería el "cosa" Por cierto, la clase cosa, más abstracta no puede ser, ¿no había otro nombre para darle? :) Saludos |
| La franja horaria es GMT +2. Ahora son las 12:27:23. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi