class GestioneVolo { public static final int N_INIZIALE_VOLI = 1; private Volo[] elencoVoli; private int numeroVoli; public GestioneVolo() { elencoVoli = new Volo[N_INIZIALE_VOLI]; numeroVoli = 0; } public void aggiungiVolo( Volo v ) { if (!esisteVolo(v)) { if (numeroVoli == elencoVoli.length) { espandiElenco(); } elencoVoli[numeroVoli] = v; numeroVoli += 1; } } public boolean eliminaVolo( String codice ) { int pos = ricercaVolo(codice); if (pos>=0) { elencoVoli[pos] = elencoVoli[numeroVoli-1]; numeroVoli -= 1; return true; } else { return false; } } public Volo[] cercaVoliCon(String part, String dest) { Volo[] elenco = new Volo[numeroVoli]; int pos = 0; for (int i = 0; i < numeroVoli; ++i) { Volo vi = elencoVoli[i]; if (part.equals(vi.restituisciPartenza()) && dest.equals(vi.restituisciDestinazione())) { elenco[pos] = vi; pos += 1; } } return elenco; } public int contaVoliConVelMediaInferioreA( double soglia ) { int c = 0; for (int i = 0; i < numeroVoli; i++) { double velMedia = elencoVoli[i].restituisciDistanza() / elencoVoli[i].restituisciDurata(); if (velMedia < soglia) { c += 1; } } return c; } public int[] contaTipologie() { int[] frequenza = new int[Volo.N_TIPOLOGIE]; for (int i = 0; i < numeroVoli; i++) { int tipo = elencoVoli[i].restituisciTipo(); frequenza[tipo] += 1; } return frequenza; } public boolean collegateUnoScalo(String partenza, String destinazione) { // Per ogni volo... for (int i = 0; i < numeroVoli; i++) { // ... controlla se per la partenza data ... String pt = elencoVoli[i].restituisciPartenza(); if (pt.equals(partenza)) { String di = elencoVoli[i].restituisciDestinazione(); // ... esiste una destinazione intermedia... for (int j = 0; j < numeroVoli; j++) { String pi = elencoVoli[j].restituisciPartenza(); String dt = elencoVoli[j].restituisciDestinazione(); // ... che conduce alla destinazione data. if (pi.equals(di) && dt.equals(destinazione)) { return true; } } } } return false; } private boolean esisteVolo( Volo v ) { for (int i = 0; i < numeroVoli; i++) { Volo vi = elencoVoli[i]; if (vi.confronta(v)) { return true; } } return false; } private int ricercaVolo( String codice ) { for (int i = 0; i < numeroVoli; i++) { String ct = elencoVoli[i].restituisciCodice(); if (ct.equals(codice)) { return i; } } return -1; } private void espandiElenco(){ Volo[] nuovoElenco = new Volo[numeroVoli * 2]; for (int i = 0; i < elencoVoli.length; i++) { nuovoElenco[i] = elencoVoli[i]; } elencoVoli = nuovoElenco; } }