Por cierto.
Estaba pensando que para el proceso de búsqueda, se podría reducir mucho código si las estaciones estuvieran en una matriz, y no en arrays separados.
Pero claro, no todas las líneas tienen la misma cantidad de estaciones, y por lo tanto no se puede construir una matriz.
Sin embargo, se puede construir algo parecido a una matriz donde no importe si cada línea tiene una cantidad distinta de estaciones.
No se si has trabajado con colecciones de datos dinámicas, como las clases Vector, ArrayList, etc...
Son colecciones de datos similares a los "arrays primitivos", pero no tienen un tamaño determinado, pueden crecer o decrecer según se añaden o eliminan elementos y además tiene todas las ventajas que da ser una clase orientada a objetos: métodos, herencias, etc...
La ideas es crear cada línea usando una de estas clases, por ejemplo Vector que para este caso nos sobra con lo que ofrece.
Una vez creadas las líneas, estos objetos Vector, se pueden a su vez agrupar en un array simple.
De este modo, tenemos algo muy parecido a una matriz.
Esto hace que luego en el método de busca de estaciones, ya no es necesario usar un bucle distinto para cada linea.
Basta con solo dos bucles anidados.
Abajo dejo un código de prueba donde verás que el método de buscar estaciones, queda reducido a muy pocas líneas.
Además, ya puestos a usar la clase Vector, en ese método de búsqueda lo que hago es devolver los nombres de las líneas coincidentes en un objeto Vector.
Así en un solo objeto tenemos los nombres de las líneas y también la cantidad, pues nos basta con consultar la longitud que tiene dicho Vector.
Aquí te dejo el código por si te resulta útil.
public class EstacionesMetro {
static Vector<String>[] estaciones; //Array de objetos Vector
public static void main(String[] args) {
initEstaciones();
Scanner teclado = new Scanner(System.in);
System.out.print("Estación a consultar: ");
String estacion = teclado.nextLine();
teclado.close();
//Recogemos en un Vector las líneas que contienen dicha estacion
Vector<String> lineas = lineas_por_estacion(estacion);
if (lineas.isEmpty())
System.out.println("No se han encontrado lineas para esas estación.");
else {
System.out.println("Hay " + lineas.size() + " líneas que contienen esa estación.");
System.out.print("Las líneas son: ");
for (String lin: lineas)
System.out.print("[ L" + lin + " ] ");
}
}
static Vector<String> lineas_por_estacion(String estacion) {
Vector<String> lineas = new Vector<String>();
for (int i = 0; i < estaciones.length; i++) {
for (int j = 0; j < estaciones[i].size(); j++) {
if (estaciones[i].get(j).equalsIgnoreCase(estacion)) {
lineas.add(Integer.toString(i + 1));
}
}
}
return lineas;
}
static void initEstaciones() {
Vector<String> l1 = new Vector<String>();
l1.add("Hospital de Bellvitge"); l1.add("Bellvitge"); l1.add("Av. Carrilet");
l1.add("Rambla Just Oliveras"); l1.add("Can Serra"); l1.add("Florida");
l1.add("Torrassa"); l1.add("Santa Eulalia"); l1.add("Mercat Nou");
l1.add("Plaça de Sants"); l1.add("Hostafrancs"); l1.add("Espanya");
l1.add("Rocafort"); l1.add("Urgell"); l1.add("Universitat");
l1.add("Catalunya"); l1.add("Urquinaona"); l1.add("Arc de Triomf");
l1.add("Marina"); l1.add("Glories"); l1.add("Clot");
l1.add("Navas"); l1.add("La Sagrera"); l1.add("Fabra i Puig");
l1.add("Sant Andreu"); l1.add("Torras i Bages"); l1.add("Trinitat Vella");
l1.add("Baro de Viver"); l1.add("Santa Coloma"); l1.add("Fondo");
Vector<String> l2 = new Vector<String>();
l2.add("Paral·lel"); l2.add("Sant Antoni"); l2.add("Universitat");
l2.add("Passeig de Gràcia"); l2.add("Tetuan"); l2.add("Monumental");
l2.add("Sagrada Familia"); l2.add("Encants"); l2.add("Clot");
l2.add("Bac de Roda"); l2.add("Sant Marti"); l2.add("La Pau");
l2.add("Verneda"); l2.add("Artigues Sant Adria"); l2.add("Sant Roc");
l2.add("Gorg"); l2.add("Pep Ventura"); l2.add("Badalona Pompeu Fabra");
Vector<String> l3 = new Vector<String>();
l3.add("Zona Universitaria"); l3.add("Palau Reial"); l3.add("Maria Cristina");
l3.add("Les Corts"); l3.add("Plaça del Centre"); l3.add("Sants Estacio");
l3.add("Tarragona"); l3.add("Espanya"); l3.add("Poble Sec");
l3.add("Paral·lel"); l3.add("Drassanes"); l3.add("Liceu");
l3.add("Catalunya"); l3.add("Passeig de Gracia"); l3.add("Diagonal");
l3.add("Fontana"); l3.add("Lesseps"); l3.add("Vallcarca");
l3.add("Penitents"); l3.add("Vall d'Hebron"); l3.add("Montbau");
l3.add("Mundet"); l3.add("Valldaura"); l3.add("Canyelles");
l3.add("Roquetes"); l3.add("Trinitat Nova");
Vector<String> l4 = new Vector<String>();
l4.add("La Pau"); l4.add("Besos"); l4.add("Besos Mar");
l4.add("El Maresme Forum"); l4.add("Selva de Mar"); l4.add("Poblenou");
l4.add("Llacuna"); l4.add("Bogatell"); l4.add("Ciutadella Vila Olimpica");
l4.add("Barceloneta"); l4.add("Jaume I"); l4.add("Urquinaona");
l4.add("Passeig de Gracia"); l4.add("Girona"); l4.add("Verdaguer");
l4.add("Joanic"); l4.add("Alfons X"); l4.add("Guinardo Hospital de Sant Pau");
l4.add("Maragall"); l4.add("Llucmajor"); l4.add("Via Julia");
l4.add("Trinitat Nova");
Vector<String> l5 = new Vector<String>();
l5.add("Cornella Centre"); l5.add("Gavarra"); l5.add("Sant Ildefons");
l5.add("Can Boixeres"); l5.add("Can Vidalet"); l5.add("Pubilla Cases");
l5.add("Collblanc"); l5.add("Badal"); l5.add("Plaça de Sants");
l5.add("Sants Estacio"); l5.add("Entença"); l5.add("Hospital Clinic");
l5.add("Diagonal"); l5.add("Verdaguer"); l5.add("Sagrada Familia");
l5.add("Sant Pau Dos de Maig"); l5.add("Camp de l'Arpa"); l5.add("La Sagrera");
l5.add("Congres"); l5.add("Maragall"); l5.add("Virrei Amat");
l5.add("Vilapicina"); l5.add("Horta"); l5.add("El Carmel");
l5.add("El Coll La Teixonera"); l5.add("Vall d'Hebron");
estaciones = new Vector[5];
estaciones[0] = l1; //Linea 1 está en posicion 0
estaciones[1] = l2; //Linea 2 en posicion 1, etc...
estaciones[2] = l3;
estaciones[3] = l4;
estaciones[4] = l5;
}
}
En pantalla tendríamos esto:
Estación a consultar: Diagonal
Hay 2 líneas que contienen esa estación.
Las líneas son: [ L3 ] [ L5 ]
Pregunta cualquier duda. Un saludo.