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

[SOLUCIONADO] ArrayList dentro de ArrayList

Estas en el tema de ArrayList dentro de ArrayList en el foro de Java en Foros del Web. Hola a todos, sigo con un proyecto y estoy en un punto donde no se exactamente como decirle al programa que haga la estructura que ...
  #1 (permalink)  
Antiguo 14/04/2015, 10:49
Avatar de maiksix  
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 10 años
Puntos: 1
ArrayList dentro de ArrayList

Hola a todos,

sigo con un proyecto y estoy en un punto donde no se exactamente como decirle al programa que haga la estructura que yo quiero...

Primero de todo tengo un main donde llamo una clase en la que leo los ficheros txt que necesito para hacer los cálculos. Como ya me indicasteis en otros hilos guarde esos datos en ArrayList para conseguir evitar dobles lecturas etc...

Ahora a parte de estas clases, tengo una llamada "Solucion", otra llamada "Ruta" y otra llamada "Leg".

La Class Leg tiene el siguiente código

Código:
public class Leg {

	 private String Departure=null;
	 private String Arrival=null;
	 private float xOrigen=0.0f;
	 private float yOrigen=0.0f;
	 private int id_avion;
	 private double hora;
	 

	 
	 //DUMMY SOLUTION CALCULATION
	 
	 public Leg(String departure ,float xOrigen, float yOrigen , int id_avion, double hora)
	 {   
	     this.Departure=departure;
	     this.id_avion=id_avion;
	     this.xOrigen=xOrigen;
	     this.yOrigen=yOrigen;
	     this.hora=hora;
	 }
	 /* GET METHODS */
	 public String getDeparture(){return Departure;}
	 public String getArrival(){return Arrival;}
	 public float getxOrigen(){return xOrigen;}
	 public float getyOrigen(){return yOrigen;}
	 public int getIdAvion(){return id_avion;}
	 public double gethora(){return hora;}
	 
	 /*SET METHODS*/

	 public void SetId(int id_avion){this.id_avion=id_avion;}
}
En la clase ruta quiero hacer un arraylist de Leg, y en solución un ArrayList de Ruta.

Para eso he hecho lo siguiente en la clase Ruta:

Código:
import java.util.ArrayList;


public class Route {
	int id_ruta=0;
	int cost_total=0;
	float hora_inici=0.0f;
	float hora_final=0.0f;
	ArrayList<Leg> Ruta=new ArrayList <Leg>(); 

	//---------------------------------------------------->CREA UNA RUTA DE LEGS<------------------------------------------------
	public static void Lista (int u, ArrayList Aeropuertos, int [][] matriz,int [][] matriz_departure, int [][] matriz_arrival){
	 float xOrigen=0.0f;float yOrigen=0.0f; float xDestino=0.0f; float yDestino=0.0f; float hsalida=0.0f; float hllegada=0.0f;
     int id_avion=-1;
     int k=0;
    /* int l=0;
     while(l<Aeropuertos.size()){
		System.out.println(Aeropuertos.get(l).getname() +" :)");
   	 }*/
     for(int a=0; a<u; a++){ //this loop saves the new coordinates.    	  
   	  for(int b=0; b<u; b++){
 			 if(matriz[a][b]!=0){
 				 
 				 //Salida
 				 	String nameOrigin=Aeropuertos.get(a).getname();
 		      		xOrigen=Aeropuertos.get(a).getX();
 		      		yOrigen=Aeropuertos.get(a).getY();
 		      		hsalida=matriz_departure[a][b];
 		      		
 		      	//Llegada
 		      	String nameDestino=Aeropuertos.get(b).getname();
 		      	xDestino=Aeropuertos.get(b).getX();
		      	yDestino=Aeropuertos.get(b).getY();
 		      	hllegada=matriz_arrival[a][b];
 		      	
 		      		//matriz[a][b]=(int)calcularDistancia(xOrigen, yOrigen, xDestino, yDestino);
 		      	
 	    		  //System.out.println(" xO: "+xOrigen+" yO: "+yOrigen+" xD: "+xDestino+" xD: "+yDestino+" O: "+nameOrigin+" D: "+nameDestiny+" Distancia: "+ matriz[a][b]);
 		      		Ruta.add(new Leg(nameOrigin, xOrigen, yOrigen, id_avion, hsalida));
 		      		Ruta.add(new Leg(nameDestino, xDestino, yDestino, id_avion,hllegada));
 		      		k++;
 		     } 
 		   }//for
 	  }//for
	}
}
Llegado a este punto tengo varios problemas.
El primero es que no me reconoce aeropuertos. Lo que pretendo es pasar el ArrayList aeropuertos que tengo en otra clase como parametro y supongo que no lo hago bien y no lo detecta.

El otro problema es que creo que hasta aquí sigo la estructura que quiero plasmar, pero ahora que tengo que hacer el ArrayList de Rutas en la clase Solution no se como tirar hacia adelante.

Mas que nada es que ahora mismo en la clase en la que leo los ficheros llamo el método Lista de la clase Ruta, le paso los parámetros que necesito para hacer los calculos y luego espero poner ese arrayList calculado en la clase ruta dentro de la clase Solucion. Pero me intuyo que debe ser al revés, es decir, en la clase de lectura tengo que llamar a la clase solución, añadir un nodo iniciarlo y llamar a la clase Ruta para poner el ArrayList de Leg dentro de Solucion.

Creéis que es correcto como lo estoy haciendo, alguna idea?

A ver si alguien puede echarme una mano!
Muchas gracias :)

Un saludo
__________________
Going hard for too long... Can't get enough
  #2 (permalink)  
Antiguo 14/04/2015, 11:51
 
Fecha de Ingreso: marzo-2015
Mensajes: 45
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: ArrayList dentro de ArrayList

Hola...

Los POJOS están bien, solamente que yo lo haría de la siguiente manera para relacionar dos objetos entre sí, a continuación te proporciono un ejemplo sencillo pero funcional...

PojoA
Código Java:
Ver original
  1. public class PojoA {
  2.     private String Campo1;
  3.     private PojoB pojob;
  4.    
  5.     public String getCampo1() {
  6.         return Campo1;
  7.     }
  8.    
  9.     public void setCampo1(String campo1) {
  10.         Campo1 = campo1;
  11.     }
  12.    
  13.     public PojoB getPojob() {
  14.         return pojob;
  15.     }
  16.    
  17.     public void setPojob(PojoB pojob) {
  18.         this.pojob = pojob;
  19.     }
  20. }

PojoB
Código Java:
Ver original
  1. public class PojoB {
  2.     private String Campo2;
  3.     private String Campo3;
  4.    
  5.     public String getCampo2() {
  6.         return Campo2;
  7.     }
  8.    
  9.     public void setCampo2(String campo2) {
  10.         Campo2 = campo2;
  11.     }
  12.    
  13.     public String getCampo3() {
  14.         return Campo3;
  15.     }
  16.    
  17.     public void setCampo3(String campo3) {
  18.         Campo3 = campo3;
  19.     }
  20. }

Main
Código Java:
Ver original
  1. public class ClaseMain {
  2.     public static void main(String[] args) {
  3.         for (PojoA i : llenarLista()){
  4.             System.out.println(i.getCampo1() + " " + i.getPojob().getCampo2() + " " + i.getPojob().getCampo3());
  5.         }
  6.     }
  7.    
  8.     private static List<PojoA> llenarLista(){
  9.         List<PojoA> list = new ArrayList<PojoA>();
  10.        
  11.         PojoA a = new PojoA();
  12.         PojoB b = new PojoB();
  13.         b.setCampo2("Mirai Nikki");
  14.         b.setCampo3("Gasai");
  15.         a.setCampo1("Yuno");
  16.         a.setPojob(b);
  17.         list.add(a);
  18.        
  19.         a = new PojoA();
  20.         b = new PojoB();
  21.         b.setCampo2("Yuuki");
  22.         b.setCampo3("SAO");
  23.         a.setCampo1("Asuna");
  24.         a.setPojob(b);
  25.         list.add(a);
  26.        
  27.         a = new PojoA();
  28.         b = new PojoB();
  29.         b.setCampo2("Hyuga");
  30.         b.setCampo3("Naruto");
  31.         a.setCampo1("Hinata");
  32.         a.setPojob(b);
  33.         list.add(a);
  34.        
  35.         return list;
  36.     }
  37. }

Aquí lo interesante es que dentro del Objeto A creo un valor del Objeto B e igualmente genero sus respectivos Set & Get, de esa manera ya tengo "relacionados" ambos objetos, únicamente cuando cree la lista del objeto principal que en este caso viene siendo PojoA ya que es el que contiene también a mi PojoB, únicamente voy seteando primero los valores que corresponde al Objeto B, posteriormente ese Objeto B lo paso al Objeto A además de agregar el campo que falta.

Finalmente solo itero el objeto con ayuda de un bucle for y voy recuperando los valores a través de los métodos Get.

Cualquier duda y/o inconveniente, aquí estamos. Suerte!
  #3 (permalink)  
Antiguo 16/04/2015, 15:40
Avatar de maiksix  
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 10 años
Puntos: 1
Respuesta: ArrayList dentro de ArrayList

Hola!

Muchas gracias por tu respuesta. He conseguido hacerlo, aunque estoy teniendo algunos problemas al guardar los datos, pero creo que es por otra cosa.

Lo marco como solucionado ya que la estructura funciona :)

Muchas gracias y un saludo!
__________________
Going hard for too long... Can't get enough

Etiquetas: arraylist, clase, programa, string
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 10:35.