Исключение в потоке «main» java.util.Ошибка InputMismatchException

#java

#java

Вопрос:

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

 Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
at gangPackage.newClass.main(newClass.java:15)
  

Вот мой код:

 package gangPackage;
import java.util.*;
public class newClass {
    public static void main (String[] args) {
        Scanner Scan = new Scanner(System.in);
        String name;
        int age;
        double gpa;

        System.out.println("Enter your name: ");
        name = Scan.nextLine();
        System.out.println("Enter students age: ");
        age = Scan.nextInt();
        System.out.println("Enter your GPA: ");
        gpa = Scan.nextDouble();


        System.out.printf(name   " is "   age   " years old. And has a GPA of "   gpa);
    }
}
  

Комментарии:

1. Каковы были ваши входные данные?

2. Ваш код верен. Я думаю, что ввод во время GPA (строка 15, как указано в ошибке) не в двойном формате, возможно, вы ввели не числовой ввод

3. @Mark Моими входными данными были: Hotam для имени, 19 для возраста и 3,9 для среднего балла, когда я добавляю одну цифру в средний балл, все работает нормально. и даже добавляет 0 в конце, например, если я поставлю 3, он напечатает 3.0

4. Я думаю, вам нужно добавить еще немного кода для проверки ввода. попробуйте использовать метод Scanner.hasNext…().

5. Я выполнил ваш код с вашими вводимыми данными. Это работает хорошо, ошибка не была выдана

Ответ №1:

Ваш код выглядит нормально.

InputMismatchException Возникает в Scanner , когда заданный ввод не соответствует ожидаемому формату ввода. Ваше исключение возникает в строке 15, где сканер ожидает десятичное число, такое как 3.14 (которое, в зависимости от локали вашей системы, десятичное число может быть представлено точкой . или запятой , !)

Если вы уверены, что вводимые вами входные данные представляют собой абсолютно десятичное число, но вы не уверены, какой языковой стандарт вы используете, вы можете принудительно ввести определенный языковой стандарт с помощью useLocale метода.

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

Ответ №2:

когда вы вводите значение double или float, вводите через запятую (,), а не точку (.), когда консоль запрашивает вас ввести значение.

Ответ №3:

когда вы вводите значение double или float, вводите его следующим образом 80,9, а не таким образом 80,9

Комментарии:

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