05/07/2009, 10:59
|
| | | Fecha de Ingreso: junio-2009
Mensajes: 91
Antigüedad: 15 años, 6 meses Puntos: 2 | |
Respuesta: Situacion extañisima (poblema de codigo) Hola Abell. Mirá, probá lo siguiente, si no me equivoco es la solución a tu problema.
public class Movimiento
{
Cuadricula origen;
Cuadricula destino;
Cuadricula trayectoria[]=new Cuadricula[20];
Movimiento(Cuadricula o,Cuadricula d)
{
origen=o;
destino=d;
}
//Calculara la trayectoria para ir de origen a destino
void CalcularTrayectoria(Cuadricula o, Cuadricula d)
{
int i=0;
int j=0;
trayectoria[i]=o;
Cuadricula pos=new Cuadricula(o.x,o.y);
while (pos.x!=d.x || pos.y!=d.y)
{
if(pos.x!=d.x)
{
if(pos.x>d.x)
pos.x--;
else
pos.x++;
}
if(pos.y!=d.y)
{
if(pos.y>d.y)
pos.y--;
else
pos.y++;
}
i++; trayectoria[i]=new Cuadricula(pos.x, pos.y);
System.out.println("trayectoria["+i+"]="+trayectoria[i].x+"-"+trayectoria[i].y);
}
for(j=0;j<=i;j++)
System.out.println("trayectoria["+j+"]="+trayectoria[j].x+"-"+trayectoria[j].y);
}
La línea que está en negrita es la que modifiqué. Cuando trabajas con este tipo de referencias a objetos, tenés que asegurarte que luego el objeto especificado no sea modificado. En este caso, vos añadis al array una instancia de Cuadricula, cuyos valores se van modificando a lo largo del while. Entonces, lo que hago yo en esta modificación, es poner un nuevo objeto en el array, con los datos que querés poner. El problema, mas especificamente, es que un array, no es mas que una lista de direcciones de memoria. La variable "pos" es una única variable, por ende, con una única posición de memoria propia. Entonces, cada vez que modificas el objeto, la posición sigue siendo la misma, por ende, el array está repleto, con la misma posición de memoria de pos. Y es por esto, que siempre toma el ultimo valor que tuvo, en otras palabras, la ultima modificación que está contenida en esa posición de memoria. Añadiendo objetos nuevos, cada uno de ellos tendrá su memoria propia, y de esta manera, no perderás los valores previos.. Me explico? creo que me enrede un poco en la explicación, pero es por esto que te explico que no te está funcionando. ;) Espero te sirva |