Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Vorrei calcolare la media prendendo tutti i valori da un .doc

    Ciao a tutti, vorrei calcolare la media prendendo tutti i valori da un .doc che contiene il seguente testo: (compresi spazi e a capo)
    Nome del doc "mediaNUMERI"
    "

    mediaA 12

    mediaB 54

    mediaC 32,33

    mediaD 45

    "
    Per farlo Vorrei che:
    0 digito su un "Jtextfield" di nome "TextNomeFile" il nome del file "mediaNUMERI".
    1 digito un "Jbutton" di nome ButtonMEDIA.
    2 Il softwere prende il nome del file direttamente da un "Jtextfield" di nome "TextNomeFile".
    (Il file .doc è già esistente in una cartella all'interno della directory del programma).
    3 La lettura del file .doc, da parte del software, fosse solo per i numeri perciò: 12, 54, 32,33 , 45
    4 Ora che calcolasse in numero di righe dove sono i numeri, in questo caso 4
    5 Poi fargli fare 35,83 = (12+54+32,22+45)/4 l'operazione con le variabili dovrebbe essere cosi: Media = (x1+x2+x3+xn..)/y
    6 Infine stampare il risultato in un ultimo "JtextField" di nome textMedia1 perciò stampare: 35,83 (in questo caso)


    Questo è uno stralcio di codice che conosco è possibile implementarlo per raggiungere lo scopo sopra descritto e se potete consigliarmi cosa studiare per capire lo sviluppo? grazie
    codice:
    ButtonMEDIA = new JButton("Media");
            ButtonMEDIA.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    JFileChooser chooser = new JFileChooser();   
                    int risultato = chooser.showOpenDialog(null);
                    if (risultato == JFileChooser.APPROVE_OPTION) {
                       
                    
                    File file = chooser.getSelectedFile();
                
                        try
                        {
                            input = new BufferedReader(
                                    new InputStreamReader(
                                    new FileInputStream(
                                    file)));
                            
                          textMedia1.setText(input.readLine());  
                      
                            
    
    
                        }
                        catch(Exception e1)
                        {       
                            e1.printStackTrace();
                        }
                   
                } 
                    
                }
            });

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    i valori da un .doc che contiene il seguente testo: (compresi spazi e a capo)
    Ok. Deduco quindi che è un testo "puro" (non è il .doc di Ms Office).

    Quote Originariamente inviata da desiderio Visualizza il messaggio
    4 Ora che calcolasse in numero di righe dove sono i numeri, in questo caso 4
    5 Poi fargli fare 35,83 = (12+54+32,22+45)/4 l'operazione con le variabili dovrebbe essere cosi: Media = (x1+x2+x3+xn..)/y
    Innanzitutto non basta ovviamente leggere una sola riga. Vanno lette tutte le righe. Si fa quindi un ciclo "finché ci sono righe" (che tecnicamente vuol dire ciclare finché readLine() restituisce diverso da null).

    Le righe "vuote" le puoi anche saltare. Fai un trim() della riga di testo (per eliminare eventuali spazi) e se risulta vuota (lunghezza 0 o uguale a "") allora non la consideri.

    Le altre righe invece le analizzi. Ora, quei mediaA, mediaB ecc.. sono sempre così? Cioè cosa ci può essere prima del numero? Se sai che c'è una sola parola prima del numero, puoi usare Scanner per tokenizzare la riga: butti via il primo token (la parola) e poi prendi un token double.

    Attenzione, vedo una virgola in 32,33. Scanner gestisce l'input "localizzato", se il tuo sistema ha la lingua italiana predefinita, allora 32,33 è corretto come double interpretato da Scanner.

    Chiaramente per ogni double che estrai, lo sommi in una variabile e incrementi un contatore. Alla fine fai quel calcolo che hai detto.

    Se hai dubbi più precisi, chiedi.


    P.S. NON fare tutto questo nel actionPerformed, separa le cose e fai almeno un metodo separato.
    Ultima modifica di andbin; 29-01-2017 a 18:59
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Intanto grazie mi metto all'opera.

    due cose:
    Ok. Deduco quindi che è un testo "puro" (non è il .doc di Ms Office).
    Questo aspetto non lo conosco.

    Ora, quei mediaA, mediaB ecc.. sono sempre così?
    No possono essere anche più parole tipo: "Il primo valore è 15"

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Questo aspetto non lo conosco.
    Il punto è che la estensione ".doc" è abbastanza vaga. Nel senso che vista genericamente vuol semplicemente dire un "documento".
    Quindi un conto è se scrivi un file di testo con un editor di testo "puro" (es. Notepad, Notepad++, PsPad ecc...) e lo salvi con estensione .doc. Mentre TUTTO un altro conto è un .doc generato dal Microsoft Office (o suite equivalente/compatibile). I .doc di Office sono un formato proprietario Microsoft e sono file "binari" estremamente complessi quindi NON li puoi trattare come file di testo leggibile carattere per carattere con es. FileReader o FileInputStream+InputStreamReader.
    Tutto qui. Se dici in generale .doc, precisa sempre se intendi l'uno o l'altro.

    Quote Originariamente inviata da desiderio Visualizza il messaggio
    No possono essere anche più parole tipo: "Il primo valore è 15"
    Ok, se sai che l'unico token numerico della riga è quello che ti interessa, allora puoi sempre usare Scanner e andare avanti buttando via i token finché trovi quello numerico.

    C'è un token numerico double? Se sì, l'hai trovato. Se no, lo estrai come token generico String (e non ne fai nulla) e ripeti da capo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Sono riuscito con questo codice a isolare gli interi, perciò uso interi al posto di decimali.

    codice:
    public class hhhhh
    {
        public static void main(String[] argv) throws IOException
        {
            
            Scanner scanner = new Scanner(new BufferedReader(new FileReader("prova.doc")));
            Vector<Integer> vi = new Vector<Integer>();
    
    
            while(scanner.hasNext())
            {
    
    
    
                if(scanner.hasNextInt())
                    vi.add(scanner.nextInt());
    
                else
                    scanner.next();
            }
    
    
            for(Integer i : vi)
    
    
                System.out.println(i);    
            
            
    
    
            scanner.close();
        }
    }
    Come li posso sommare?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Come li posso sommare?
    Tieni una variabile che mantiene la sommatoria, inizialmente a 0. Per ciascun valore: lo addizioni in questa variabile. Il numero di elementi lo deduci già dal size della collezione che stavi usando.

    Attenzione, se vuoi che quella media sia anche non intera, la variabile della sommatoria è bene che: a) la variabile della sommatoria sia double oppure b) se la sommatoria è int, devi fare la divisione come "floating-point".
    Se dividi un int per un int, NON hai un double. Uno dei due operandi deve essere (o essere portato temporaneamente a) double per avere un risultato in floating-point.
    Ultima modifica di andbin; 30-01-2017 a 10:47
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Si ma il problema è che la variabile "i" che stampo contiene tutti i valori di riferimento es:
    25
    45
    70
    Come posso sommarli. Perché i li contiene tutti e tre e nn ho le singole variabili.
    Se mi hai già risposto sopra nn ho capito come procedere.
    Ultima modifica di desiderio; 30-01-2017 a 19:29

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da desiderio Visualizza il messaggio
    Come posso sommarli.
    Ma l'ho detto prima: metti anche un'altra variabile, di sommatoria, inizialmente 0. Poi in ciclo ciascun valore lo sommerai lì.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Il problema è che praticamente nn so come si scrive. Posso trovare come si scrive cercando variabile di sommatoria?

  10. #10
    Il problema è che praticamente nn so come si scrive. Posso trovare come si scrive cercando variabile di sommatoria?

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.