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