/** Un oggetto di classe OsservazioniEsteso può rappresentare un insieme di valori, permettendo * di aggiungere un valore double all'insieme, ottenere il numero di valori aggiunti dal momento * della creazione dell'oggetto, ottenere il massimo, il minimo, la media e la varianza dei valori aggiunti. * Inoltre, si possono restituire il numero di valori positivi e il numeo di valori negativi aggiunti dal momento della creazione. */ public class OsservazioniEsteso { // le variabili membro seguenti dovrebbero avere tutte accesso private int numValori; double sommaValori; double sommaQuadrati; double max; double min; int numPositivi; int numNegativi; /** Questo costruttore crea un nuovo oggetto, al quale non è stato ancora aggiunto * alcun valore */ public OsservazioniEsteso() { numValori=0; sommaValori=0; sommaQuadrati = 0; min=Double.MAX_VALUE; max=-Double.MAX_VALUE; numPositivi = 0; numNegativi = 0; } /** Aggiunge un double all'oggetto. * @param val il valore da aggiungere */ public void aggiungi(double val) { numValori++; sommaValori += val; sommaQuadrati += val*val; if(val>max) max=val; if(val 0) numPositivi++; if(val < 0) numNegativi++; } /** Permette di conoscere il numero di valori aggiunti a partire dalla creazione dell'oggetto. * @return il numero di valori aggiunti a partire dalla creazione dell'oggetto */ public int getNumValori() { return numValori; } /** Permette di conoscere la media dei valori aggiunti a partire dalla creazione dell'oggetto. * Non può essere invocato su un oggetto nel quale non è stato ancora aggiunto alcun valore. * @return la media dei valori aggiunti a partire dalla creazione dell'oggetto. Se invocato su un oggetto * al quale non è stato ancora aggiunto alcun valore, il valore restituito non è corretto. */ public double getMedia() { return sommaValori/numValori; } /** Permette di conoscere la varianza dei valori aggiunti a partire dalla creazione dell'oggetto. * Non può essere invocato su un oggetto nel quale non è stato ancora aggiunto alcun valore. * @return la media dei valori aggiunti a partire dalla creazione dell'oggetto. Se invocato su un oggetto * al quale non è stato ancora aggiunto alcun valore, il valore restituito non è corretto. */ public double getVarianza() { return sommaQuadrati/numValori - (sommaValori/numValori)*(sommaValori/numValori); } /** Permette di conoscere lo scarto quadratico medio dei valori aggiunti a partire dalla creazione dell'oggetto. * Non può essere invocato su un oggetto nel quale non è stato ancora aggiunto alcun valore. * @return la media dei valori aggiunti a partire dalla creazione dell'oggetto. Se invocato su un oggetto * al quale non è stato ancora aggiunto alcun valore, il valore restituito non è corretto. */ public double getScarto() { return Math.sqrt(getVarianza()); } /** Permette di conoscere il minimo dei valori aggiunti a partire dalla creazione dell'oggetto. * @return il minimo dei valori aggiunti a partire dalla creazione dell'oggetto. Se invocato su un oggetto * al quale non è stato ancora aggiunto alcun valore restituisce Double.MAX_VALUE */ public double getMin() { return min; } /** Permette di conoscere il massimo dei valori aggiunti a partire dalla creazione dell'oggetto. * @return il massimo dei valori aggiunti a partire dalla creazione dell'oggetto. Se invocato su un oggetto * al quale non è stato ancora aggiunto alcun valore restituisce -Double.MAX_VALUE */ public double getMax() { return max; } /** Permette di conoscere il numero di valori positivi aggiunti a partire dalla creazione dell'oggetto. * @return il numero di valori positivi aggiunti a partire dalla creazione dell'oggetto. Se invocato su un oggetto * al quale non è stato ancora aggiunto alcun valore restituisce 0 */ public double numPositivi() { return numPositivi; } /** Permette di conoscere il numero di valori negativi aggiunti a partire dalla creazione dell'oggetto. * @return il numero di valori negativi aggiunti a partire dalla creazione dell'oggetto. Se invocato su un oggetto * al quale non è stato ancora aggiunto alcun valore restituisce 0 */ public double numNegativi() { return numNegativi; } }