Проверьте двойное значение, когда входные данные содержат только целые и десятичные части - PullRequest
0 голосов
/ 01 октября 2019

У меня есть простой способ проверить ввод двойного значения с клавиатуры следующим образом:

private static final Scanner sc = new Scanner(System.in);

public static double checkInputDouble(String s) {
    while (true)
        try {
            System.out.print(s);
            double result = Double.parseDouble(sc.nextLine().trim());
            return result;
        } catch (NumberFormatException e) {
            System.err.println("> INPUT MUST BE DOUBLE NUMBER...");
        }
}

Но я хочу расширить ситуацию. Например, если вы введете 3.14, он вернет 3.14. Но если вы введете 3. (только 3 и десятичная точка), он вернет 3.0.

Как перехватить это исключение и показать его на экране?

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Вы можете сделать это, добавив условие, чтобы проверить последний символ ввода и выбросить NumberFormatException, если символ ".".

private static final Scanner sc = new Scanner(System.in);

public static double checkInputDouble(String s) {
    while (true)
        try {
            System.out.print(s);
            String nextLine = sc.nextLine().trim();
            if (nextLine.endsWith(".")) {
                throw new NumberFormatException();
            }
            double result = Double.parseDouble(nextLine);
            return result;
        } catch (NumberFormatException e) {
            System.err.println("> INPUT MUST BE DOUBLE NUMBER...");
        }
}
0 голосов
/ 01 октября 2019

Вместо того, чтобы перехватить исключение и показать его на экране, вы можете прочитать его как строку и затем проверить, заканчивается ли оно символом., Добавьте его с 0. Как показано ниже:

private static final Scanner sc = new Scanner(System.in);

public static double checkInputDouble(String s) {
    while (true)
        try {
            System.out.print(s);
            String dou = sc.nextLine().trim();
            if(dou.endsWith(".")){
               dou = dou + "0";
            }
            double result = Double.parseDouble(dou);
            return result;
        } catch (NumberFormatException e) {
            System.err.println("> INPUT MUST BE DOUBLE NUMBER...");
        }
}

Ввод: 3.

Вывод: 3.0

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