Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/04/2015, 14:47
Avatar de maiksix
maiksix
 
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 9 años, 6 meses
Puntos: 1
Problema con ArrayList dentro de otro

Hola a todos :)

Estoy trabajando el tema de los ArrayList, y concretamente hace unos días pregunte como hacer un arrayList dentro de otro. Un compañero respondió y lo soluciono. Ahora mismo tengo la estructura montada, y estoy trabajando en el uso de esas estructuras.

Concretamente tengo las siguientes líneas de código:

Código:
	
              int actual=0;
              int decision=0;
              int aux=0;
              int contador_rutas=0;
              String nameOrigin=null;
              String nameLlegada=null;
              xOrigen=0;
              yOrigen=0;
              xDestino=0;
              yDestino=0;
              
              
              Ruta.add(new Leg(nameOrigin, xOrigen, yOrigen)); //Origen
     			Ruta.add(new Leg(nameLlegada, xDestino, yDestino));//Intermedio
     			Ruta.add(new Leg(nameOrigin, xOrigen, yOrigen));
           
              while((actual<Aeropuertos.size())){  
             	 while((aux<Aeropuertos.size())){
             	Dummy.add(new Route()); //Ruta
           		
             	while(decision==0){
           		//Salida
           			if((aux<Aeropuertos.size())){
           		nameOrigin=Aeropuertos.get(actual).getname();
           		xOrigen=Aeropuertos.get(actual).getX();
           		yOrigen=Aeropuertos.get(actual).getY();
           		hsalida=matriz_departure[actual][aux];
           		// matriz[a][b]=(int)calcularDistancia(xOrigen, yOrigen, xDestino, yDestino);
           		//Llegada
           		nameLlegada=Aeropuertos.get(aux).getname();
           		xDestino=Aeropuertos.get(aux).getX();
           		yDestino=Aeropuertos.get(aux).getY();
           		hllegada=matriz_arrival[actual][aux];
           		//Add node
           		if(nameOrigin!=nameLlegada){
           			//aixo sets
           			Ruta.get(0).setDeparture(nameOrigin);
           			Ruta.get(0).setxOrigen(xOrigen);
           			Ruta.get(0).setyOrigen(yOrigen);
           			
           			Ruta.get(1).setDeparture(nameLlegada);
           			Ruta.get(1).setxOrigen(xDestino);
           			Ruta.get(1).setyOrigen(yDestino);
           			
           			Ruta.get(2).setDeparture(nameOrigin);
           			Ruta.get(2).setxOrigen(xOrigen);
           			Ruta.get(2).setyOrigen(yOrigen);
           			
System.out.println("Rutas "+contador_rutas +"O" +Ruta.get(0).getDeparture() + " P "+Ruta.get(1).getDeparture() +" E "+Ruta.get(2).getDeparture());
           			Dummy.get(contador_rutas).setArray(Ruta);
           			contador_rutas++;
           		 decision=1;
           		}
           		//Increment variable 
           		aux++;
           			}else{
           				decision=1;
           				}
           		}
           		decision=0;
           		//aux=0;
              }
           	 aux=0;
              actual++;
            }

//-------------------------------------------------------------------SHOWS DUMMY SOLUTION-----------------------------------------------------------------
              
              int counter=0;
              int interno=0;
              ArrayList<Leg> solucion=new ArrayList();
             while(counter<Dummy.size()){
            	  System.out.println();
            	  System.out.println("-----------------------------Ruta "+(counter +1)+" ----------------------------");
            	  System.out.println();
            	  solucion=Dummy.get(counter).getArray();
            	  interno=0;
            	  while(interno<solucion.size()){
            		 System.out.println("P "+(interno+1)+" --> "+solucion.get(interno).getDeparture());
            		  interno++;
            	  }
            	  counter++;
              }
En estas líneas pretendo hacer todas las combinaciones posibles del ArrayList aeropuertos, y luego mostrarlas en pantallas.

En este arrayList tengo en posición 0: Barcelona, posición 1: Lisboa, Posición 2: Milan.
Y por lo tanto con las lineas anteriores quiero que en cada nodo del arraylist Dummy, haya en su interior otras tres cajitas (Ruta).
Por ejemplo: Posición 1 de Dummy tiene que tener dentro otro array (Ruta) con p1: Barcelona, p2: Lisboa, p3:Barcelona. Posición 2 de Dummy otro array Ruta con p1: Barcelona, p2: Milan, p3: Barcelona, Posición 3 de Dummy otro array con p1: Lisboa, p2: Barcelona, p3: Lisboa... etc... hasta hacer todas las combinaciones

En el trozo marcado en rojo me saca los valores que cojo del arraylist Aeropuertos y muestra correctamente que cojo los valores correctos del ArrayList aeropuertos para hacer la solución esperada. Pero cuando le dijo que saque por pantalla el arraylist dummy, con el contenido del arraylist Ruta (un arraylist ruta para cada nodo del arraylist dummy) me lo muestra mal...

Concretamente siempre me muestra P1 de Ruta dentro de cada nodo de Dummy: Milan, P2: Lisboa, P3: Milan... Por lo que intuyo o que siempre me guarda el mismo arraylist Ruta en todas las posiciones del Arraylist Dummy o la impresión de los valores esta mal y el calculo es correcto... Aunque he estado mirando rato e incluso haciendo a mano el algoritmo para ver si veía donde fallaba y no he visto nada raro...

Alguna idea? De si estoy montando mal la estructura, las referencias, de si falta algún índice o cualquier otra cosa?

Muchísimas gracias, como siempre. Y un saludo!!
__________________
Going hard for too long... Can't get enough

Última edición por maiksix; 20/04/2015 a las 14:52