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;
}
}