Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118

    [JAVA] Scanner e nextInt()

    Salve!
    Ho un problema a leggere un file di testo con java.

    Nel file di testo c'è scritto:

    0;0;0;0;0;0;0;0;0
    0;0;0;0;0;0;0;0;0
    1;0;0;0;0;0;0;1;0
    1;2;1;0;0;0;0;2;2
    1;2;2;0;1;1;2;1;2

    Ora, dovrei estrapolare ogni numero (1, 1 o 2) per poterlo elaborare, solo che non riesco.
    Ho provato nel seguente modo:

    codice:
    Scanner scan = new Scanner(new File(filename));
    scan.useDelimiter(";");
    
    while (scan.hasNext())
           System.out.print(scan.nextInt() + " ");
    
    scan.close();

    Il problema è che quando arriva a fine riga e dopo aver stampato correttamente 0 0 0 0 0 0 0 0, mi dà l'errore: Exception in thread "main" java.util.InputMismatchException.

    Come posso risolvere il problema?
    Grazie!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non ho mai visto la classe Scanner (forse è una classe di supporto di qualcosa oppure appartirne alla JDK 1.5), ma il problema è semplice.
    Utilizza un BufferedReader per leggere il file ed il metodo split() della classe String per splittare rispetto al punto e virgola.


    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    118
    Purtroppo per l'esame devo per forza usare la classe Scanner che è stata implementata dalla versione 1.5

    Grazie lo stesso!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Mi sono documentato e credo che tu debba utilizzare il metodo hasNextInt() al posto di hasNext().
    Da quello che ho capito hasNext() si posiziona sul prossimo token dopo il separatore, mentre hasNextInt() si posiziona sul prossimo intero dopo il separatore.
    Siccome alla fine della prima riga, dopo il separatore trova anche un carattere di new line, non può restituirti un intero, andando in errore e lanciando l'eccezione InputMismatchException.

    Purtroppo io non utilizzo la JDK 1.5 quindi non posso provare per avere maggiori garanzie. Quindi tocca a te fare la prova.


    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.