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:
En estas líneas pretendo hacer todas las combinaciones posibles del ArrayList aeropuertos, y luego mostrarlas en pantallas.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 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!!