Volo.java
Passeggero.javacodice:package aeroporto; import java.util.*; public class Volo implements Comparable { String key; String id; String part; String citta; String arr; List<Passeggero> list = new LinkedList<Passeggero>(); public void popolaCampi(Scanner sc) { id = sc.nextLine(); part = sc.nextLine(); citta = sc.nextLine(); arr = sc.nextLine(); key = id.concat(part); } public void addPasseggero(Passeggero p) { if(!p.idVolo.equals(key)) { throw new IllegalArgumentException(p.toString() + " non vola con " + toString()); } list.add(p); } public int compareTo(Object o) { assert o instanceof Volo; Volo v = (Volo)o; return part.compareTo(v.part); } public String toString() { return "<id: " + id + "; giorn part: " + part + "; origine: " + citta + "; ora arrivo: " + arr + ">"; } }
Infine aeroporto.javacodice:package aeroporto; public class Passeggero { String cognome; String nome; String nazione; String residenza; String idVolo; public void popolaCampi(Java.util.Scanner sc) { cognome = sc.nextLine(); nome = sc.nextLine(); nazione = sc.nextLine(); residenza = sc.nextLine(); idVolo = sc.nextLine(); } public String toString() { return "<Cognome: " + cognome + "; Nome: " + nome + "; Nazionalita: " + nazione + "; Residenza: " + residenza + "; id volo: " + idVolo + ">"; } }
E' possibile secondo voi migliorare questo codice?codice:package aeroporto; import java.util.*; import java.io.*; public class Aeroporto { Map<String, Volo> voli = new HashMap<String, Volo>(); Map<String, List<Passeggero>> nazionalita = new HashMap<String, List<Passeggero>>(); List<Volo> elenco = new LinkedList<Volo>(); public static void main(String[] argv) { (new Aeroporto()).exec(argv); } void exec(String[] argv) { Scanner stdin = new Scanner(System.in); while(true) { System.out.print("cmd? Leggi/Elenco/Nazionalita/Exit > "); //r String cmd = stdin.nextLine(); if(cmd == null || cmd.equals("") || cmd.equalsIgnoreCase("exit")) { break; } else if(cmd.equalsIgnoreCase("leggi")) { leggi(stdin); } else if(cmd.equalsIgnoreCase("elenco")) { elenco(stdin); } else if(cmd.equalsIgnoreCase("nazionalita")) { nazionalita(stdin); } else { System.out.println("Comando <" + cmd + "> non riconosciuto"); } } } void nazionalita(Scanner sc) { System.out.print("Nazionalita? > "); String n = sc.nextLine(); List<Passeggero> l = nazionalita.get(n); System.out.println(String.valueOf(l)); } void elenco(Scanner sc) { Collections.sort(elenco); System.out.println(elenco); } void leggi(Scanner sc) { System.out.print("Nome file? > "); String nome = sc.nextLine(); Scanner file = null; try { file = new Scanner(new FileReader(nome)); while(file.hasNextLine()) { String tipo = sc.nextLine(); if(tipo.equals("VOLO")) { Volo v = new Volo(); v.popolaCampi(file); voli.put(v.key, v); elenco.add(v); } else if(tipo.equals("PASSEGGERO")) { Passeggero p = new Passeggero(); Volo v = voli.get(p.idVolo); v.addPasseggero(p); List<Passeggero> l = nazionalita.get(p.nazione); if(l == null) { l = new LinkedList<Passeggero>(); nazionalita.put(p.nazione, l); } l.add(p); } else { System.out.println("Record tipo <" + tipo + "> non riconosciuto"); continue; } } file.close(); } catch(IOException ioe) { ioe.printStackTrace(); } } }![]()
Quale potrebbe essere una soluzione alternativa? Magari al posto delle HashMap utilizzare delle LinkedHashMap, ecc.![]()
Fatemi sapere, grazie!![]()

Rispondi quotando