я ищу способ улучшить эту функцию, которая в основном управляет двойным типом входных данных

#java

Вопрос:

это моя функция для управления двойным вводом от пользователя, но она управляет только целочисленными значениями, если пользователь вводит запятую’, ‘символ, например, 100 300, он отказывается его принимать, поэтому я подумываю о следующем : когда функция встретит символ запятой’, ‘ он изменит его на символ точки ‘.’ и тогда мне интересно, можно ли теперь преобразовать строковое значение в двойное, например «100.300» `

 public static double controlDoubleInput() {
        Scanner scanner = new Scanner(System.in).useDelimiter("n");
        String option = scanner.next();
        boolean isNotDigit = true;
        char[] array = option.toCharArray();
        do {
            for(char c : array) {
                if(Character.isDigit(c)) {
                    isNotDigit = false;
                }
                else {
                    isNotDigit = true;
                    break;
                }
            }

            if(isNotDigit) {
                System.out.println("input mismatch please retry : ");
                option = scanner.next();
                array = option.toCharArray();
            }
        } while(isNotDigit);

        return Double.parseDouble(option);
    }
 

`

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

1. Почему вы не пользуетесь nextDouble() ?

2. Здравствуйте, это потому, что я не хочу, чтобы программа останавливалась, я знаю, что могу поймать исключение, но я не знаю, как выполнить цикл, проверяя исключение, например, если исключения нет, то выйдите из цикла, иначе продолжайте требовать от пользователя двойное значение, если вы знаете, как это сделать, помогите !

3. Вы можете использовать hasNextDouble() его, чтобы проверить, будет ли следующее чтение nextDouble() успешным или нет. Используйте это либо для использования nextDouble() , либо next() для пропуска пользовательского ввода.

Ответ №1:

Используйте локализацию.

 try (Scanner scanner = new Scanner(System.in).useDelimiter("n")) {
    String option = scanner.next();
    NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
    while (true) {
         try {
                return nf.parse(option).doubleValue();
         } catch (ParseException e) {
                System.out.println("input mismatch please retry : ");
                option = scanner.next();
         }
     }
}