Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    19

    [JAVA] Media e deviazione standard

    Questa è la traccia:
    Esercizio P6.7. Media e deviazione standard. Scrivete un programma che legga un insieme di dati
    in virgola mobile. Al termine, stampate il conteggio dei valori, la media e la deviazione standard.
    La media di un insieme di valori x1, ..., xn è data da

    m = Σxi/n

    dove Σxi = x1 + ... + xn è la somma dei valori di ingresso. La deviazione standard è espressa da
    questa formula

    s = sqrt{(Σ(xi-m)^2)/(n-1)}


    che, però, non è adatta per la nostra attività, perché, nel momento in cui calcolate la deviazione
    standard, i singoli valori xi se ne sono andati da un pezzo. Finché non sapete come memorizzare
    questi valori, utilizzate questa formula, anche se è numericamente meno stabile:

    s = sqrt{((Σ(xi)^2) -1/n * (Σxi)^2)/(n-1)}

    Potete calcolare quest’ultimo valore tenendo traccia, nella classe DataSet, del conteggio dei valori
    in ingresso, della loro somma e della somma dei loro quadrati, mano a mano che li ricevete.

    Ecco il codice che ho scritto però è sbagliato

    codice:
    public class DataSet {
    	
    	private double sommaValori;
    	private double sommaQuadrati;
    	private int numValori;
    	private double media;
    	private double deviazioneStandard;
    	
    	public DataSet(){
    		this.numValori = 0;
    		this.media = 0;
    		this.deviazioneStandard = 0;
    	}
    	
    	public void setAddValue(double valoreDecimale){
    		numValori++;
    		this.sommaValori = sommaValori + valoreDecimale;
    		this.media = sommaValori/numValori;
    		this.sommaQuadrati = Math.pow(sommaValori, 2) + Math.pow(valoreDecimale, 2);
    		this.deviazioneStandard = Math.sqrt(((sommaQuadrati)-(1/numValori)*(Math.pow(sommaValori, 2)))/(numValori -1));
    	}	
    	
    	public int getNumValori(){
    		return numValori;
    	}
    		
    	public double getMedia(){
    		return media;
    	}
    	
    	public double getDeviazioneStandard(){
    		return deviazioneStandard;
    	}
    
    }
    
    import java.util.Scanner;
    
    public class DataSetTester {
    	
    	public static void main(String[] args) {
    		
    		Scanner in = new Scanner(System.in);
    		
    		DataSet ds = new DataSet();
    		
    		boolean done = false;
    		while(!done){
    			
    			System.out.println("Inserisci valore decimale oppure -1 per terminare: ");
    			ds.setAddValue(in.nextDouble());
    			
    			if(in.nextDouble() == -1)
    				done = true;
    		}
    		
    		System.out.println("Numero di valori inseriti : "+ds.getNumValori());
    		System.out.println("Media dei valori inseriti : "+ds.getMedia());
    		System.out.println("Deviazione standard dei valori inseriti : "+ds.getDeviazioneStandard());
    
    	}
    
    
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    19
    per terminare il ciclo vorrei inserire "Q" non -1 solo che non ci riesco

  3. #3

    Re: [JAVA] Media e deviazione standard

    Originariamente inviato da cv91
    ...
    Ecco il codice che ho scritto però è sbagliato
    ...
    Sbagliato in che senso? Che errore ti da?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Originariamente inviato da cv91
    per terminare il ciclo vorrei inserire "Q" non -1 solo che non ci riesco
    codice:
    ...
    if(in.next().equals("Q")) 
        done = true;
    ...
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Originariamente inviato da cv91
    per terminare il ciclo vorrei inserire "Q" non -1 solo che non ci riesco
    codice:
    ...
    if(in.next().equals("Q")) 
        done = true;
    ...
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    19
    Mi fa inserire due valori perchè nell'if c'è in.nextDouble(), io devo inserire soltanto un valore oppure Q per terminare e poi mi deve dare i risultati.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    19
    Poi la deviazione standard mi da sempre infinito, come mai ?

  8. #8
    Originariamente inviato da cv91
    Mi fa inserire due valori perchè nell'if c'è in.nextDouble(), io devo inserire soltanto un valore oppure Q per terminare e poi mi deve dare i risultati.
    Prova a fare una cosa del genere:
    codice:
    		System.out.println("Digita Q per terminare la sequenza di input.");
    		boolean done = false;
    		while( !done ) {
          		    String input = null;
          		    try {
                	        System.out.print("Valore: ");
                	        input = in.nextLine();
                	        ds.setAddValue( Double.parseDouble(input) );
                	        System.out.println("correct input");
          		    } catch (NumberFormatException e) {
          			    if( input.equals("Q") )
          				done = !done;
          			    else System.out.println("wrong input");
          		    }
    		}

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    19
    Siccome questo esercizio lo preso dal libro da dove sto studiando essendo arrivato al 6 capitolo che parla dei cicli ancora non ho studiato il significato di try-catch quindi non credo che questo esercizio deve essere risolto in questo modo

  10. #10
    Originariamente inviato da cv91
    non ho studiato il significato di try-catch
    In generale, quando un'applicazione entra in contatto con l'utente (in questo caso ciò avviene tramite una console) è buona norma gestire l'errore in cui egli può incorrere.
    Questo è uno degli accorgimenti da seguire affinchè un'applicazione sia robusta, ma evidentemente lo scopo del tuo esercizio non è questo oppure vuole spingerti a trovare una soluzione per gestire eventuali errori (non usando il costrutto try-catch).

    A questo punto hai diverse strade:
    - non controlli l'input fornito dall'utente, rendendo la tua applicazione soggetta ad errori:
    codice:
                    String input = null;
    		System.out.println("Digita Q per terminare la sequenza di input.");
                    System.out.print("Valore: ");
    
    		while( !(input = in.nextLine()).equals("Q") ) { // case-sensitive
                	         ds.setAddValue( Double.parseDouble(input) );
                             System.out.print("Valore: ");
                    }
    - oppure ti crei un metodo che controlla se l'input fornito è un numero, rendendo così la conversione dei valori avversa all'errore:
    codice:
                    String input = null;
    		System.out.println("Digita Q per terminare la sequenza di input.");
                    System.out.print("Valore: ");
    
    		while( !(input = in.nextLine()).equals("Q") ) {
                             if( isNumber(input) ) // ..metodo da te definito..
                	             ds.setAddValue( Double.parseDouble(input) );
                             System.out.print("Valore: ");
                    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.