2014-11-19 6 views
0

Я искал, но я действительно не могу найти что-то неправильное в коде, пожалуйста, помогите!«Исключение в потоке» main «java.util.InputMismatchException» **

Код компилируется, но это ошибка, я получаю, когда я хочу ответить на вопрос 3:

Exception in thread "main" java.util.InputMismatchException 
     at java.util.Scanner.throwFor(Unknown Source) 
     at java.util.Scanner.next(Unknown Source) 
     at java.util.Scanner.nextDouble(Unknown Source) 
     at ForgetfulMachine.main(ForgetfulMachine.java:16) 

И это мой код:

import java.util.Scanner; 

public class ForgetfulMachine 
{ 
    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 

     System.out.println("What city is the capital of Germany?"); 
     keyboard.next(); 

     System.out.println("What is 6 divided by 2?"); 
     keyboard.nextInt(); 

     System.out.println("What is your favorite number between 0.0 and 1.0?"); 
     keyboard.nextDouble(); 

     System.out.println("Is there anything else you would like to tell me?"); 
     keyboard.next(); 
    } 
} 
+0

Попробуйте добавить 'nextLine()' call before 'nextDouble()' – August

+2

Вы находитесь в Германии или где-нибудь, где числа с плавающей запятой вводятся с помощью ',' вместо '.'? Попробуйте ответить «0,5' (работает для меня) – zapl

+0

@zapl Спасибо! И да, я в Германии! – tyskmeister

ответ

2

Scanner выбросит это исключение, если запись в формате, который является неправильным для Locale сканера. В частности, в вашем случае используется неправильный разделитель. Оба . и , являются типичными разделителями десятичных чисел, специфичными для локали.

Чтобы выяснить, что десятичный разделитель для локали по умолчанию, вы можете использовать:

System.out.println(
    javax.text.DecimalFormatSymbols.getInstance().getDecimalSeparator() 
); 

Смотри также:

0

Ничто не так с вашим кодом. Соблюдайте тип при вводе данных. Не вводите double, пока вы ожидаете целого числа и т. Д. Вы можете обойти этот тип ошибок, применяя защитное кодирование, где вы принимаете данные только от пользователя, когда оно соответствует ожидаемому значению.

public static void main(String[] arg) { 
    Scanner keyboard = new Scanner(System.in); 

    System.out.println("What city is the capital of Germany?"); 
    keyboard.nextLine(); 

    System.out.println("What is 6 divided by 2?"); 
    boolean isNotCorrect = true; 

    while(isNotCorrect){ 
     isNotCorrect = true; 
     try { 
      Integer.valueOf(keyboard.nextLine());  
      isNotCorrect = false; 
     } catch (NumberFormatException nfe) { 
      System.out.println("Enter an integer value"); 
     } 
    } 


    System.out.println("What is your favorite number between 0.0 and 1.0?"); 
    isNotCorrect = true; 

    while(isNotCorrect){ 

     try { 
      Double.valueOf(keyboard.nextLine()); 
      isNotCorrect = false; 
     } catch (NumberFormatException nfe) { 
      System.out.println("Enter a double value"); 
     } 
    } 

    System.out.println("Is there anything else you would like to tell me?"); 
    keyboard.next(); 
}