class Rubrica { // Attributi private Persona[] elencoPersone; private int numeroPersone; // Costruttore public Rubrica( int numeroMaxPersone ) { elencoPersone = new Persona[numeroMaxPersone]; numeroPersone = 0; } // Aggiungi una persona public void aggiungi( Persona p ) { // Se l'elenco è pieno allora è necessario espanderlo if (numeroPersone == elencoPersone.length) { espandiElenco(2); } elencoPersone[numeroPersone] = p; ++numeroPersone; } // Cerca una persone per nome public Persona cercaPersonaPerNome( String nomeCercato ) { for (int i = 0; i < numeroPersone; i++) { String nomeTrovato = elencoPersone[i].restituisciNome(); if (nomeTrovato.equals(nomeCercato)) { return elencoPersone[i]; } } return null; } // Cerca tutte le persone che abitano ad un dato indirizzo public Persona[] cercaPersonePerIndirizzo( String indirizzoCercato ) { Persona[] personeCercate = new Persona[numeroPersone]; int elementiCercati = 0; for (int i = 0; i < numeroPersone; i++) { String indirizzoTrovato = elencoPersone[i].restituisciIndirizzo(); if (indirizzoTrovato.equals(indirizzoCercato)) { personeCercate[elementiCercati] = elencoPersone[i]; ++elementiCercati; // elementiCercati++; // elementiCercati += 1; // elementiCercati = elementiCercati + 1; } } return personeCercate; } // Cancellare una persona (dato il nome) public Persona cancellaPersonaPerNome( String nomeCercato ) { Persona risultato = null; for (int i = 0; i < numeroPersone; i++) { String nomeTrovato = elencoPersone[i].restituisciNome(); if (nomeTrovato.equals(nomeCercato)) { risultato = elencoPersone[i]; elencoPersone[i] = elencoPersone[numeroPersone - 1]; elencoPersone[numeroPersone - 1] = null; --numeroPersone; break; } } return risultato; } // Altra versione del metodo di cancellazione (più elegante) public Persona cancellaPersonaPerNome2( String nomeCercato ) { Persona risultato = null; int i = 0; while ((i < numeroPersone) && (risultato == null)) { String nomeTrovato = elencoPersone[i].restituisciNome(); if (nomeTrovato.equals(nomeCercato)) { risultato = elencoPersone[i]; elencoPersone[i] = elencoPersone[numeroPersone - 1]; elencoPersone[numeroPersone - 1] = null; --numeroPersone; } } return risultato; } // Metodo per espandere l'elenco di un fattore dato private void espandiElenco(int fattore) { int nuovaDimensione = elencoPersone.length * fattore; Persona[] elencoEspanso = new Persona[nuovaDimensione]; for (int i = 0; i < elencoPersone.length; i++) { elencoEspanso[i] = elencoPersone[i]; } elencoPersone = elencoEspanso; } }