Ошибка при использовании input.nextDouble в Java - PullRequest
0 голосов
/ 08 ноября 2019

Я новичок в Java и пытаюсь сделать простой калькулятор ИМТ в Java (в метрах и килограммах). Я получаю сообщение об ошибке всякий раз, когда набираю свой рост в качестве двойного ввода:

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 ui.BMI_Calculator.main(BMI_Calculator.java:15)

Код:

package ui;

import java.util.Scanner;

public class BMI_Calculator {

    public static void main(String[] args)
    {

        double height, weight;

        Scanner input = new Scanner(System.in);

        System.out.printf("Give height (in metres): ");
        height = input.nextDouble();

        System.out.printf("%nGive weight (in kilograms): ");
        weight = input.nextDouble();


        double BMI = weight / (height * height);

        System.out.printf("%nBMI = %d", BMI);

        input.close();
    }

}

1 Ответ

2 голосов
/ 08 ноября 2019

Я протестировал ваш код в онлайн-среде IDE, и он сработал, затем я протестировал на своей машине и получил ту же ошибку, что и вы, затем я снова протестировал, но для запятой использовал запятую (,) вместо точек (.)и это сработало. InputMismatchException выбрасывается, потому что объект Scanner использует локаль по умолчанию JVM для анализа входного значения, а когда он отличается от ожидаемого, он вызывает исключение.

Вы можете передатьлокаль для сканера, который использует. в качестве десятичного разделителя:

input.useLocale(Locale.US);

или просто используйте (,) при вводе значений.

Кроме того, в вашем коде есть еще одна ошибка в последнем printf:

 System.out.printf("%nBMI = %d", BMI);

Вы должны использовать% f для чисел с плавающей запятой вместо% d, который используется для целых чисел. Вы можете найти больше информации о том, как форматировать числовой вывод в следующей документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...