Исключение несоответствия ввода

Когда я ввожу целые числа, такие как 5, 7, 14 и т. д., все в порядке. Но когда ввожу например 7.5 получаю ошибку. Где ошибка?

    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 Exercise_11.main(Exercise_11.java:8)

Ниже приведен код:

    import java.util.Scanner;
    public class Exercise_11 {
    public static void main(String[] args) {
    Scanner radius = new Scanner(System.in);
    System.out.print("Please input the radius of circle: ");
    double r= radius.nextDouble();
    double l= 2*Math.PI*r;
    double s= Math.PI*r*r;
    System.out.println("Length = " + l);
    System.out.println("Area = " + s);
    }
    }

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

A Paul 25.12.2020 22:45

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

Bahram Afandi 25.12.2020 22:48

Вы работаете с системой, в которой локаль указывает, что , является десятичным разделителем. Попробуйте 7,5

Elliott Frisch 25.12.2020 22:50

@ElliottFrisch странно .. Десятичный разделитель в моей системе - точка "." но я сделал то, что ты сказал. Оно работает. Почему? Посмотрите на 1-й снимок экрана, там система также использует точку "." для разделения чисел.

Bahram Afandi 25.12.2020 22:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
866
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Язык вашей системы не поддерживает точку в качестве десятичного разделителя. Используйте локаль, которая поддерживает точку в качестве разделителя, например. Locale.ENGLISH.

Scanner radius = new Scanner(System.in).useLocale(Locale.ENGLISH);

Пример запуска:

Please input the radius of circle: 7.5
Length = 47.12388980384689
Area = 176.71458676442586

Спасибо за помощь. Странно.... Десятичный разделитель в моей системе - точка "." но я сделал то, что ты сказал. Оно работает. Почему? Посмотрите на 1-й снимок экрана, там система также использует точку "." для разделения чисел

Bahram Afandi 25.12.2020 22:56

Вы устанавливаете локаль где-то в своем приложении, например Locale.setDefault(...)?

Arvind Kumar Avinash 25.12.2020 23:07

После вашего комментария поставил и все ок. Работает.. Но в настройках моего компьютера разделитель не ",". Это точка "." Я уверен, что использую это часто.

Bahram Afandi 25.12.2020 23:11

Не используя мой код, выполните System.out.println(radius.locale());, и он покажет вам, какую локаль использует ваша JVM по умолчанию.

Arvind Kumar Avinash 25.12.2020 23:16

az_AZ_#Latn.... Понятно. Большое спасибо. Большое спасибо. Я многому научился! Да здравствует!

Bahram Afandi 25.12.2020 23:23

Другие вопросы по теме