Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Perché non riesco a calcolare la media con scanner?

    Dove sta l'errore di questo codice? Perché Eclipse non mi visualizza la media e cosa significa quell'asterisco usato in useDelimiter?

    codice:
    // Use Scanner to compute an average a list of 
    // comma-separated values.  
    import java.util.*; 
    import java.io.*; 
     
    class Esempio { 
      public static void main(String args[]) 
        throws IOException { 
     
        int count = 0; 
        double sum = 0.0; 
     
        // Write output to a file. 
        FileWriter fout = new FileWriter("test.txt"); 
     
        // Now, store values in comma-separated list. 
        fout.write("2, 3.4,    5,6, 7.4, 9.1, 10.5, done"); 
        fout.close(); 
     
        FileReader fin = new FileReader("Test.txt"); 
     
        Scanner src = new Scanner(fin); 
     
        // Set delimiters to space and comma. 
        src.useDelimiter(", *"); 
     
        // Read and sum numbers. 
        while(src.hasNext()) { 
          if(src.hasNextDouble()) { 
            sum += src.nextDouble(); 
            count++; 
          } 
          else { 
            String str = src.next();  
            if(str.equals("done")) break; 
            else { 
              System.out.println("File format error."); 
              return; 
            } 
          } 
        } 
     
        src.close(); 
        System.out.println("Average is " + sum / count); 
      } 
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Come dice la documentazione, useDelimiter prende una stringa che verrà usata per creare un oggetto Pattern, forse dovresti dare un'occhiata alle espressioni regolari.

  3. #3
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Originariamente inviato da Kaamos
    Come dice la documentazione, useDelimiter prende una stringa che verrà usata per creare un oggetto Pattern, forse dovresti dare un'occhiata alle espressioni regolari.
    non capisco... l'esempio non l'ho fatto io... l'ho copiato dal libro...

    se scrivo questo funziona:

    codice:
    fout.write("2m 3,4m    5m6m 7,4m 9,1m 10,5m done"); 
        fout.close(); 
     
        FileReader fin = new FileReader("Test.txt"); 
     
        Scanner src = new Scanner(fin); 
     
        // Set delimiters to space and comma. 
        src.useDelimiter("m *");

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Perchè chi si è occupato della traduzione di quel libro non ha tenuto conto che in Italia si usa una forma diversa da quella inglese/americana per la rappresentazione dei numeri con la virgola... (e questa è solo una delle rogne che si incontrano quando si cerca documentazione in Italiano, invece di averla in lingua inglese). Nel tuo PC, come nel mio, molto probabilmente è impostato il paese Italia come predefinito. Questo fa sì che Scanner utilizzi, di default, la rappresentazione italiana dei numeri (ovvero, usa la virgola come separatore di decimale e non il punto).

    Prova ad aggiungere la riga in grassetto nel tuo primo codice:
    codice:
        // Set delimiters to space and comma. 
        src.useDelimiter(", *"); 
        src.useLocale( Locale.ENGLISH );
    E, come per magia, tutto funzionerà.

    In questo modo stiamo dicendo a Scanner di usare la rappresentazione inglese dei numeri: Scanner, così, riuscirà a capire che 3.4 è un numero con la virgola e non andrà in errore.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.