Classe scanner

di il
5 risposte

Classe scanner

Ho realizzato un semplice esempio di input con la classe scanner. Il codice funziona con gli interi ma non con i double e con le stringhe. Dove sta l'errore?

Scanner in = new Scanner( System.in );
//questo funziona
int a = in.nextInt(); //lettura di interi
int b = in.nextInt();
int somma = a+b;
System.out.print("La somma dei due numeri è ");
System.out.println(somma);

//questo non funziona
double c=in.nextDouble(); //lettura di double
double d=c*2; //quello che segue è il messagio se a c si assegna un valore tipo 2.4
System.out.println(d);
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864) at
java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at input_con_scanner.main(input_con_scanner.java:14)
Java Result: 1

5 Risposte

  • Re: Classe scanner

    Ciao, la classe Scanner sfrutta la localizzazione quindi il metodo nextDouble() si aspetta di leggere un numero in virgola mobile nella notazione italiana: parte intera e parte decimale separate dalla virgola (2,4). Ci pensera' poi il metodo nextDouble() ad assegnare a c il numero nel corretta notazione (2.4).
  • Re: Classe scanner

    daiazu ha scritto:


    Ho realizzato un semplice esempio di input con la classe scanner. Il codice funziona con gli interi ma non con i double e con le stringhe. Dove sta l'errore?

    Scanner in = new Scanner( System.in );
    //questo funziona
    int a = in.nextInt(); //lettura di interi
    int b = in.nextInt();
    int somma = a+b;
    System.out.print("La somma dei due numeri è ");
    System.out.println(somma);

    //questo non funziona
    double c=in.nextDouble(); //lettura di double
    double d=c*2; //quello che segue è il messagio se a c si assegna un valore tipo 2.4
    System.out.println(d);
    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864) at
    java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextDouble(Scanner.java:2413)
    at input_con_scanner.main(input_con_scanner.java:14)
    Java Result: 1
    L'errore sta nella tua nazione di residenza. Apparentemente sembra che abiti in Italia, o perlomeno il computer la pensa cosi'.
    Prima di dichiarare il tuo oggetto Scanner, prova ad inserire
    
    Locale.setDefault(Locale.US);
    
    In alternativa, utilizza la virgola al posto del punto decimale
  • Re: Classe scanner

    sottovento ha scritto:


    Prima di dichiarare il tuo oggetto Scanner, prova ad inserire
    
    Locale.setDefault(Locale.US);
    
    Questo ok ma è "globale".

    Se si vuole cambiare il locale solo per quel Scanner:
    in.useLocale(Locale.US);
    (in è l'oggetto Scanner)

    E va anche bene Locale.ENGLISH, che è solo un po' più generico di Locale.US
  • Re: Classe scanner

    OK funziona. Grazie a tutti.
  • Re: Classe scanner

    andbin ha scritto:


    E va anche bene Locale.ENGLISH, che è solo un po' più generico di Locale.US
    Si, ma io sono in US
Devi accedere o registrarti per scrivere nel forum
5 risposte