Skip to content
Advertisement

i’m searching for a way to improve this function that’s basically doing the control of double input data type

this is my Function to control the double input from the user but it control only integer values if the user enter a comma ‘,’ character like for example 100,300 it refuse to accept it so i’m thinking of doing the following : when the function encounter a comma character ‘,’ it will change it to a dot character ‘.’ and then i’m wondering if now the string value can be converted to a double like “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);
    }

`

Answer

Use localization.

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();
         }
     }
}
Advertisement