Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Problema referencia de objetos ArrayList

Estas en el tema de Problema referencia de objetos ArrayList en el foro de Java en Foros del Web. Muy buenas, estoy trabajando en un pequeño algoritmo Branch&Bound y tengo un problema que no consigo arreglar, en breve les expongo: Tengo una clase nodo ...
  #1 (permalink)  
Antiguo 09/11/2014, 08:40
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Problema referencia de objetos ArrayList

Muy buenas,

estoy trabajando en un pequeño algoritmo Branch&Bound y tengo un problema que no consigo arreglar, en breve les expongo:

Tengo una clase nodo con dos atributos ArrayList (containers y posters), y cuando quiero expandir ese nodo, los hijos de este nodo cogen los valores del último hijo creado, aqui el código:

//nodo es el padre
//nfills es un entero con el numero de hijos que tiene nodo
//this.pendents es un ArrayList con objetos CPoster, añadimos al hijo el que le corresponde
//this.nodosVivos es un ArrayList con los nodos vivos (sin ser expandidos todavia)

for (int i=0;i<nfills;i++){

CNode hijo = new CNode(nodo.containers, nodo.posters);
hijo.profundidad = nodo.profundidad +1
poster = this.pendents.get(hijo.profundidad);
hijo.Insertar(poster);
this.nodosVivos.add(hijo);
}


El constructor de CNodo correspondiente:

public CNodo(ArrayList<CContainer> containers, ArrayList<CPoster> posters){
this.containers = containers;
this.posters = posters;
}


Si nfills = 2, ambos hijos contienen el mismo poster... cómo consigo que sean independientes?

Muchas gracias!
  #2 (permalink)  
Antiguo 10/11/2014, 01:31
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema referencia de objetos ArrayList

Buenas,

Parece que estas siempre trabajando siempre con la misma instancia de lista.

Con el codigo que pones no se puede ver donde esta el verdadero error. Puedes poner el codigo completo o al menos aquella parte en la que asignas los valores a nodo.containers y nodo.posters?

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 10/11/2014, 03:00
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Problema referencia de objetos ArrayList

Prueba con esto:

poster = this.pendents.get(hijo.profundidad).clone();

o con:

hijo.Insertar(poster.clone());

Si no te deja, revisa esto:
http://www.sc.ehu.es/sbweb/fisica/cu...o/clonico1.htm

Y por último esto solo te valdrá si quieres que todos los posters sean independientes, si quieres mantener el original en algún nuevo nodo debes adaptar el código para evitar clonarlo en ese caso.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #4 (permalink)  
Antiguo 11/11/2014, 02:36
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Problema referencia de objetos ArrayList

Vaya... he encontrado el error... Cada hijo trabajaba con el mismo objeto CPoster, por lo que el ultimo hijo lo modificaba, así que todos los hijos de una misma profundidad tenían el mismo...

Muchas gracias por la ayuda =)
Cierro tema

Etiquetas: arraylist, clase, objetos, referencia, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:40.