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

[SOLUCIONADO] Problema con arrrayList

Estas en el tema de Problema con arrrayList en el foro de Java en Foros del Web. hola me podrian ayudar con este problema, estoy jalando registros de una BD y guardandolos en nuevos objetos, despues los agrego al un arraylist, el ...
  #1 (permalink)  
Antiguo 23/05/2015, 22:26
 
Fecha de Ingreso: mayo-2015
Mensajes: 3
Antigüedad: 9 años, 6 meses
Puntos: 0
Problema con arrrayList

hola me podrian ayudar con este problema, estoy jalando registros de una BD y guardandolos en nuevos objetos, despues los agrego al un arraylist, el problema esque cuando imprimio todo el arraylist, todos los registros son igual al ulitmo que se ingreso porfa me pueden ayuda?

<code>

private void obtieneMuestras()
{
ResultSet rs=c.getConsultaMuestra();
int vector[]=new int[8];
int i=0;
ArrayList<vectorCaracteristicas> temp=new ArrayList<>();
try {

while(rs.next())
{
vector[0]=rs.getInt("col1");
vector[1]=rs.getInt("col2");
vector[2]=rs.getInt("col3");
vector[3]=rs.getInt("col4");
vector[4]=rs.getInt("col5");
vector[5]=rs.getInt("col6");
vector[6]=rs.getInt("col7");
vector[7]=rs.getInt("col8");
vectorCaracteristicas vc=new vectorCaracteristicas(vector,rs.getInt("idusuario" ));
temp.add(vc);
}


} catch (SQLException ex) {
Logger.getLogger(Knn.class.getName()).log(Level.SE VERE, null, ex);
System.out.println("hubo error");
}

for (int j=0;j<temp.size();j++)
System.out.println(Arrays.toString(temp.get(j).get Vector())+" "+temp.get(0).getClase() +" c");

}
</code>
  #2 (permalink)  
Antiguo 24/05/2015, 01:15
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Problema con arrrayList

Buenas,

Eso te pasa porque estás sobreescribiendo siempre el mismo vector. Cámbialo así:

[.....]
int vector[] = null;
int i=0;
ArrayList<vectorCaracteristicas> temp=new ArrayList<>();
try {

while(rs.next())
{
vector = new int[8]
vector[0]=rs.getInt("col1");
[........]

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 25/05/2015, 10:38
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 8 meses
Puntos: 31
Respuesta: Problema con arrrayList

Lo que estás haciendo en el ArrayList no es meter los valores del array vector, sino meter el propio array vector sucesivas veces.
A su vez, durante cada iteración del while el array vector cambia de valores, y por lo tanto también se cambian los que ya hay previamente en el ArrayList. Porque siempre es el mismo array.
La solución es la propuesta por el profesor, porque en cada iteración del while se crea un nuevo array que nada tiene que ver con los anteriores que ya hubiese en tu arraylist, aunque tengan el mismo nombre no son el mismo array.

No es una explicación exacta exacta de lo que pasa pero se entiende el resultado.

PD: Al igual que en las SELECTS, tu objeto rs admite número de columna además del nombre de columna. Y de esa manera podrías cambiar:

vector[0]=rs.getInt("col1");
vector[1]=rs.getInt("col2");
vector[2]=rs.getInt("col3");
vector[3]=rs.getInt("col4");
vector[4]=rs.getInt("col5");
vector[5]=rs.getInt("col6");
vector[6]=rs.getInt("col7");
vector[7]=rs.getInt("col8");

por:

for (int i=0;i<=7;i++)vector[i]=rs.getInt(i+1);
  #4 (permalink)  
Antiguo 26/05/2015, 21:33
 
Fecha de Ingreso: mayo-2015
Mensajes: 3
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema con arrrayList

Muchas gracias, me sacaste del apuro, todavía me quedan algunos conceptos que entender bien de java jeje. muchas gracias
  #5 (permalink)  
Antiguo 26/05/2015, 21:34
 
Fecha de Ingreso: mayo-2015
Mensajes: 3
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema con arrrayList

Muchas gracias por el consejo :)

Etiquetas: arraylist, clase, sql
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 23:50.