GestionePortafogli.java
Created with JBuilder
class GestionePortafogli {
  // Numero iniziale di portafogli gestibili
  public static final int DIMENSIONE_INIZIALE_GESTIONE = 1;

  // Attributi
  private Portafoglio[] elencoPortafogli;
  private int           numeroPortafogli;

  // Costruttore
  public GestionePortafogli() {
    elencoPortafogli = new Portafoglio[1];
    numeroPortafogli = 0;
  }

  // Aggiunta e rimozione di portafogli
  public void aggiungi( String cliente ) {
    Portafoglio p = new Portafoglio(cliente);
    if (numeroPortafogli == elencoPortafogli.length) {
      espandiElenco();
    }
    elencoPortafogli[numeroPortafogli] = p;
    ++numeroPortafogli;
  }
  public Portafoglio elimina( String cliente ) {
    for (int i = 0; i < numeroPortafogli; ++i) {
      String clienteTrovato = elencoPortafogli[i].restituisciNome();
      if (clienteTrovato.equals(cliente)) {
        Portafoglio p = elencoPortafogli[i];
        elencoPortafogli[i] = elencoPortafogli[numeroPortafogli - 1];
        --numeroPortafogli;
        return p;
      }
    }
    return null;
  }

  // Aggiornamento delle quotazioni
  public void aggiorna( Titolo[] listino ) {
    for (int i = 0; i < listino.length; ++i) {
      Titolo t = listino[i];
      for (int j = 0; j < numeroPortafogli; ++j) {
        elencoPortafogli[j].aggiornaQuotazione(t);
      }
    }
  }

  // Elenco dei nomi di tutti i clienti che hanno un portafoglio in perdita
  public String[] calcolaClientiInPerdita() {
    String[] tmp = new String[numeroPortafogli];
    int n = 0;
    for (int i = 0; i < numeroPortafogli; ++i) {
      if (elencoPortafogli[i].calcolaRendimento() < 0) {
        tmp[n++] = elencoPortafogli[i].restituisciNome();
      }
    }
    return tmp;
  }

  // Elenco di tutti i clienti che investono prevalentemente in una certa
  // tipologia di titolo (dato come parametro)
  public String[] calcolaClientiPerTipo( int tipo ) {
    String[] tmp = new String[numeroPortafogli];
    int n = 0;
    for (int i = 0; i < numeroPortafogli; ++i) {
      int[] statistiche = elencoPortafogli[i].calcolaNumeroPerTipologia();
      if (statistiche[tipo] == estraiMassimo(statistiche)) {
        tmp[n++] = elencoPortafogli[i].restituisciNome();
      }
    }
    return tmp;
  }

  // Calcolo dell'utile (o della perdita) totale
  public double calcolaRendimentoTotale() {
    double risultato = 0.0;
    for (int i = 0; i < numeroPortafogli; ++i) {
      risultato += elencoPortafogli[i].calcolaRendimento();
    }
    return risultato;
  }

  // Metodi privati (utilizzabili solo dagli altri metodi)
  private void espandiElenco() {
    Portafoglio[] tmp = new Portafoglio[numeroPortafogli * 2];
    for (int i = 0; i < numeroPortafogli; ++i) {
      tmp[i] = elencoPortafogli[i];
    }
    elencoPortafogli = tmp;
  }
  private int estraiMassimo( int[] v ) {
    int max = 0;
    for (int i = 1; i < v.length; ++i) {
      if (v[i] > v[max]) {
        max = i;
      }
    }
    return v[max];
  }


}

GestionePortafogli.java
Created with JBuilder