Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [jvm] Exception in thread "main" java.lang.NumberFormatException: For input '..'

    Ciao a tutti...

    ho un problema che non riesco a risolvere riguardo all'input dati della java virtual machine per il tipo 'LONG'. In pratica si arrabbia se gli do in ingresso, ad esempio, '3L' (o anche '3J', che è il suffisso per i long della jvm) per specificare che è un long, mentre '3F' (float), fila liscio.

    L'errore è:
    Exception in thread "main" java.lang.NumberFormatException: For input
    string : "3L"
    Per chi volesse vedere il codice bytecode che fa la richiesta di input, è questo:

    codice:
    ;; GET
    getstatic prog.stdin Ljava/io/BufferedReader;
    invokevirtual java/io/BufferedReader/readLine()Ljava/lang/String;
    invokestatic java/lang/Long/parseLong(Ljava/lang/String;)J
    lstore 0
    Il codice è lo stesso che utilizzo per gli altri tipi, dove tutto fila liscio (anche coi float, che richiedono il suffisso F), c'è solo scritto Long e il suffisso J dove richiesto.

    Sapete darmi una mano? Non so più dove sbattere la testa

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [jvm] Exception in thread "main" java.lang.NumberFormatException: For input '..'

    Originariamente inviato da Kilin
    ho un problema che non riesco a risolvere riguardo all'input dati della java virtual machine per il tipo 'LONG'. In pratica si arrabbia se gli do in ingresso, ad esempio, '3L' (o anche '3J', che è il suffisso per i long della jvm) per specificare che è un long, mentre '3F' (float), fila liscio.

    L'errore è:
    Exception in thread "main" java.lang.NumberFormatException: For input
    string : "3L"
    Basta vedere la documentazione di parseLong(), intendo quello che prende solo un String. Dice chiaramente che la stringa può essere formata solamente da cifre decimali con l'unica eccezione che il primo carattere può essere un '-'.

    Quindi cose del tipo:

    Long.parseLong(" 123 ");
    Long.parseLong("+123");
    Long.parseLong("123L");

    sono sbagliate.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    Ah quindi per i long basta inserire il numero senza il suffisso? come mai per i float il suffisso ci vuole, e per i long no?

    EDIT: ho visto nelle references, c'è scritto così in effetti:

    Note that neither the character L ('\u004C') nor l ('\u006C') is permitted to appear at the end of the string as a type indicator, as would be permitted in Java programming language source code.
    Ma perchè sta cosa? Per i float il suffisso gli va bene, per i long no... Mi son scervellato su questo problema credendo di aver sbagliato a tradurre la get() per i long, e invece era questa sciocchezza....

    Grazie comunque...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Kilin
    Ah quindi per i long basta inserire il numero senza il suffisso? come mai per i float il suffisso ci vuole, e per i long no?
    Hanno scelto così ....

    Nella documentazione di valueOf() di Float infatti dice:

    where Sign, FloatingPointLiteral, HexNumeral, HexDigits, SignedInteger and FloatTypeSuffix are as defined in the lexical structure sections of the of the Java Language Specification..

    Quindi in questo caso, il formato di un valore floating-point per parseFloat()/valueOf() segue le specifiche del linguaggio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    Ho capito Ti ringrasssio... Stavo ammattendo con questa cosa...

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.