Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]eccezione NumberFormatException

    ciao è da poco che sto imparando java e non capisco perchè questo esercizio mi da un eccezione di tipo NumberFormatException.Il testo è:
    crea una stringa del tipo: esame#cfu#voto,usando il metodo useDelimiter della classe Scanner.

    La mia soluzione è:
    codice:
    import java.util.Scanner;
    class TestEsame{
    public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    Scanner r=sc.useDelimiter("#");
    String testo = r.nextLine();
    while(!(testo.equals("END"))){
        String materia=r.nextLine();
        int cfu=Integer.parseInt(r.nextLine());
        int voto=0;
        if(r.hasNextLine())
        voto=Integer.parseInt(r.nextLine());
        System.out.println(materia);
        System.out.println(cfu);
        System.out.println(voto);
            }    
        }
    }
    il tutto è compilato correttamente ma in esecuzione mi dà l'eccezione NumberFormatException,dovuto dalla strina "END".Perchè non posso usare END? Poi che differenze c'è tra il metodo useDelimiter della classe scanner e la classe stringtokenizer?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    99
    E' buona pratica sottoporre lo stacktrace dell'errore, la prox volta mettilo.

    Quell'errore cmq te lo darà il primo Integer.parseInt() utile quando gli chiederai il miracolo di ricondurre ad un numero intero una parola qualsiasi.

    Es.:

    codice:
    Integer.parseInt("8");//OK
    Integer.parseInt("Francesco");//Esplosione Atomica
    
    
    Ti ho lascio un metodino con boolean di ritorno per la verifica innocua di questo particolare e simpatico problema:

    codice:
    public static boolean isNumeric(String str)
        {
            return str.matches("-?\\d+(\\.\\d+)?");  
        }
    Tornando a noi, non mi torna molto quello che hai scritto rispetto alla traccia.
    Cmq se ho capito bene quello che avevi intenzione di fare ho provato a fare questo:

    codice:
    public class TestEsame{
     
        private static final Pattern delimiters = Pattern.compile(System.getProperty("line.separator")+"|\\#");
        private static Scanner scan = null;
        private static int position = 0;
        private static String[] arguments = {"materia: ", "cfu: ","voto: "};
        
        public static void main(String[] args){
    
    
            scan = new Scanner(System.in).useDelimiter(delimiters);
    
    
            while (scan.hasNext()){
                
                String i = scan.next();
                
                if(i.equalsIgnoreCase("END")){
                    break;
                } 
                else{     
                    System.out.println(arguments[position]+i);
                    position = position>1 ?0:position +1 ;
                    System.out.println(position);
                }  
            } 
            System.out.println("\r\n-------------Elaborazione Terminata------------");
            scan.close(); 
        } 
    }
    I problemi che avresti adesso:

    - Occhio che il Tokenizer o il Delimiter non ti restituiranno mai l'ultimo token a causa del "System.In" che in quanto Stream non ha mai fine finchè non lo si chiude. Ho usato la regex apposta.

    - Il loop è molto scomodo, e sopratutto non è possibile verificare il count e la posizione, anche in virtù di quanto detto sopra, per cui se inputi una stringa con numero di argomenti inferiore, sballa tutto (ma non esplode).

    Lascio a te il divertimento di adattare come + ti pare e piace


    PS: se apri gli oggetti ricorda di chiuderli ------>scan.close(); .
    Ultima modifica di Gatsu78; 25-02-2015 a 23:48
    se mi chiedeste chi è per me un vero amico vi risponderei che è una persona che io considero alla pari di me.

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    ciao grazie 1000 simpatico e completo
    Ultima modifica di el92; 26-02-2015 a 00:50

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.