Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Problema che non riesco a risolvere con la lettura da tastiera di numeri di tipo double

    Ciao a tutti, non capisco perché è da 2 giorni a questa parte che sto avendo un problema che non ho mai avuto con la lettura di numeri double da tastiera.
    Ho sempre inserito numeri double da tastiera in svariati programmi, e non ho mai avuto problemi.
    Adesso non so perché, anche col programma più banale possibile, mi esce fuori questo errore che vi scrivo sotto.
    Premetto che sono ancora alle prime armi.
    Questo è il codice di un programma semplice per la lettura di double da tastiera:

    codice:
    import java.util.Scanner;
    
    
    public class Double {
        public static void main (String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.println("Inserisci un numero di tipo double");
            double numero = input.nextDouble();
            System.out.println("Il numero vale " + numero);
        }
    }

    E questo è il messaggio di errore che mi compare quando eseguo il programma:

    codice:
    Exception in thread "main" java.util.InputMismatchException
        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 Double.main(Double.java:7)

    Cosa devo fare? non mi era mai capitata una cosa così, e sino ad oggi ha sempre funzionato tutto.
    Grazie mille a chi mi aiuterà
    Ultima modifica di LeleFT; 03-01-2017 a 12:51 Motivo: Aggiunti i tag CODE e sistemata formattazione errore

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ciao

    Il messaggio di errore è abbastanza chiaro: ottieni una InputMismatchException, in parole povere hai inserito qualcosa che non può essere interpretato come double.
    Trovi molti esempi con una ricerca su internet dell'errore, puoi anche consultare la documentazione ufficiale qui.

    Per risolvere puoi operare in diversi modi: controllare prima che lo scanner possa effettivamente leggere un double, utilizzando il metodo hasNextDouble(), o anche fare direttamente la lettura ma gestendo la possibile eccezione (con un blocco try-catch, che però non è tra le prime cose che si imparano di solito).

    Una soluzione simile alla seconda è leggere dallo scanner la stringa inserita (con nextLine()) e poi trasformare tu la stringa in double, con parseDouble() della classe Double.
    Anche in questo caso però dovresti gestire la possibile eccezione... Questa via è migliore se poi con lo scanner vuoi leggere anche stringhe, dipende dal fatto che nextLine() a differenza di nextDouble() o nextInt() "consuma" anche il carattere di invio, che altrimenti rimane nel buffer (questo per ora potrebbe non interessarti).

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bonzomoon Visualizza il messaggio
    Ho sempre inserito numeri double da tastiera in svariati programmi, e non ho mai avuto problemi.
    Adesso non so perché, anche col programma più banale possibile, mi esce fuori questo errore che vi scrivo sotto.

    codice:
    Exception in thread "main" java.util.InputMismatchException
    Tieni presente una cosa: con Scanner l'input è "localizzato", segue le regole del Locale impostato nello Scanner che di base è quello predefinito del sistema.
    Se hai un sistema impostato per default con la lingua italiana, un numero double va inserito come es. 10,45 (virgola!) perché appunto in italiano.
    È altresì ovvio che se scrivi qualunque altra cosa che non è affatto un numero es. abc 12xx o cose del genere, a maggior ragione hai un InputMismatchException!

    Quindi, in generale, o è l'applicazione che si adatta all'utente e ai default del sistema (e l'utente lo deve sapere, ovviamente) oppure imponi tu il Locale in Scanner ed è l'utente che si deve adattare alla applicazione (es. so che l'applicazione accetta SOLO in inglese, quindi scriverò 10.45)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Grazie mille, ho risolto il problema con il vostro aiuto.
    Mi sbagliavo e mettevo il punto anziché la virgola.
    Gentilissimi

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.