#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. Почему? Что заставляет вас думать, что языковой стандарт пользователя по умолчанию использует десятичные дроби с запятой?