"Исключение в потоке"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();
    }
}

2 ответа

Решение

Scanner сгенерирует это исключение, если запись имеет формат, неправильный для локали сканера. В частности, в вашем случае, если используется неправильный десятичный разделитель. И то и другое . а также , являются общими локально-зависимыми десятичными разделителями.

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

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

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

  • Scanner#locale()
  • Scanner#useLocale(Locale)
  • DecimalFormatSymbols#getInstance(Locale)

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

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();
}    
Другие вопросы по тегам