scanner read nextdouble from example con clase java inputmismatchexception

java - read - Valor doble del escáner-InputMismatchException



scanner string java (2)

Intenté usar el escáner de la manera más fácil:

Código:

double gas, efficiency, distance, cost; Scanner scanner = new Scanner(System.in); System.out.print("Enter the number of gallons of gas in the tank: "); gas = scanner.nextDouble(); System.out.print("Enter the fuel efficiency: "); efficiency = scanner.nextDouble();

Pero después de la primera entrada 5.1 lanza:

Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:909) at java.util.Scanner.next(Scanner.java:1530) at java.util.Scanner.nextDouble(Scanner.java:2456) at udacity.MileagePrinter.main(MileagePrinter.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

El estado de JavaDocs :

Lanzado por un escáner para indicar que el token recuperado no coincide con el
patrón para el tipo esperado, o que el token está fuera del rango para el tipo esperado.

Pero en mi opinión, todos se ven bien y deberían funcionar bien.

Preguntas:

  • ¿Por qué sucede esto en esta situación?
  • ¿Cómo sortear este problema?

Asegúrese de que está utilizando la configuración regional correcta

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

Tal vez esté utilizando una configuración regional donde "," es el delimitador decimal


Debe precisar una configuración regional para su escáner.

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

Desde el doc :

Una instancia de esta clase es capaz de escanear números en los formatos estándar así como en los formatos de la configuración regional del escáner. La configuración regional inicial de un escáner es el valor devuelto por el método Locale.getDefault (); se puede cambiar a través del método useLocale (java.util.Locale)

Los formatos localizados se definen en términos de los siguientes parámetros, que para una configuración regional determinada se toman del objeto DecimalFormat de esa ubicación, df, y de su objeto DecimalFormatSymbols, dfs.

Por lo tanto, su configuración regional predeterminada utiliza un DecimalFormat que espera una coma como delimitador decimal en lugar de un punto.