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

Generar objetos dinamicos y meterlos en un arraylist

Estas en el tema de Generar objetos dinamicos y meterlos en un arraylist en el foro de Java en Foros del Web. Hola a todos , tengo un problema he de generar un arraylist que contengan un objeto en cuyas variables guardos distinta informacion, como número de ...
  #1 (permalink)  
Antiguo 28/04/2006, 03:10
 
Fecha de Ingreso: agosto-2005
Mensajes: 142
Antigüedad: 18 años, 8 meses
Puntos: 0
Generar objetos dinamicos y meterlos en un arraylist

Hola a todos , tengo un problema he de generar un arraylist que contengan un objeto en cuyas variables guardos distinta informacion, como número de página, el cuerpo de un texto, etc.
El problema surge cuando al crear el objeto modificar la información e ir introduciendolo en el array me va machacando la información de los objetos de las posiciones del array anteriores. Supongo que al crear el objeto por refencia al modificar uno se modifican todos y al final lo que obtengo esun arraylist con el mismo objeto repetido en todas las posiciones del arraylist.

Un ejemplillo simple.
Código PHP:

 A
.add(new Anuncio());
            
A.add(new Anuncio());
            
A.add(new Anuncio());
            
A.add(new Anuncio());
            
C=(Anuncio)A.get(1);
            
C.setPag(4); // le damos el valor 4 a la variable página
            
A.set(1,C);
             
C=(Anuncio)A.get(2);
            
C.setPag(5); // le damos el valor 5 a la variable página
            
A.set(1,C);
            
C=(Anuncio)A.get(1);
            
System.out.println("pagina1 "+C.getPag());
             
C=(Anuncio)A.get(2);
            
System.out.println("pagina2 "+C.getPag()); 
Al final todos los objetos de las diferentes posiciones del array tienen como valor de página el 5 (el último insertado).

Muchas Gracias y hasta pronto
  #2 (permalink)  
Antiguo 28/04/2006, 04:42
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:
Como son por referencia, puedes ahorrate los A.set(). Cuando haces

C=(Anuncio)A.get(1);
C.setPag(4);

ya estás cambiando el Anuncio que hay dentro del array list, C y A[1] es exactamente lo mismo.

Cosas como...

C=(Anuncio)A.get(2);
C.setPag(5); // le damos el valor 5 a la variable página
A.set(1,C);

hacen que el elemento 1 sea el 2. En C metes el elemento 2 y luego lo metes en 1. Ahora 1 y 2 tienen el 2.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 28/04/2006, 06:09
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Crea una nueva instancia de los objetos antes de A.set... por ejemplo: A.set(posicion, new (Objeto)); ó la archiconocida variante de clonarlos en el momento de pasarselo al arraylist.

I hope this could be useful.
__________________
El último TipdaR
  #4 (permalink)  
Antiguo 28/04/2006, 06:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Haz caso a chuidiang, los Set sobran. De hecho la variable C tambien te la podrias ahorrar.

((Anuncio)A.get(1)).setPag(4);
((Anuncio)A.get(2)).setPag(5);
...

Ah, y por convención los nombres de las variables suelen comenzar por minusculas. No es obligatorio seguir la convencion pero facilita la lectura.

Un saludo
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 02:42.