异常/尝试捕获 - 确保用户输入严格是双精度的,而不仅仅是整数



我想知道是否有一种方法可以使我的代码在用户输入方面更加严格?

我正在尝试异常/尝试捕获块,并且必须接受一些用户输入并验证它是正确的日期类型。

有没有办法让用户输入严格的双精度值? 即我不希望用户能够输入没有小数点的值,例如像 5 这样的 int 并对其进行验证并将其转换为双精度,返回 5.0 - 我希望提示用户严格输入双精度值, 确保小数点是输入值的一部分。

使用包装器或类似的东西是否合适,如果是这样 - 我该怎么做?

当前代码:

import java.util.Scanner;

public class InputExceptions {
    //Do we have to do any Wrapping / instanceOf Double ?
    //Can we accept an integer (no decimal point) for double entry ?
    private static int inputInt;
    private static double inputDouble;
    public static int inputInt() {
        Scanner kybd = new Scanner(System.in);
        boolean inputOK = false;
        while (inputOK == false) {
            System.out.println("*** Please Enter an Integer Value: ");
            try {
                inputInt = kybd.nextInt();
                kybd.nextLine();
                inputOK = true;
            } catch (Exception e) {
                System.out.println("*** ERROR: VALUE ENTERED NOT INTEGER ***");
                kybd.next();
            }
        }
        return inputInt;
    }
    public static double inputDouble() {
        Scanner kybd = new Scanner(System.in);
        boolean inputOK = false;
        while (inputOK == false) {
            System.out.println("*** Please Enter a Double Value: ");
            try {
                inputDouble = kybd.nextDouble();
             kybd.nextLine();
                inputOK = true;
            } catch (Exception e) {
                System.out.println("*** ERROR: VALUE ENTERED NOT DOUBLE ***");
                kybd.next();
            }
        }
        return inputDouble;
    }
    public static void main(String[] args) {
        System.out.println("*** INTEGER Input: " + inputInt() + " ***");
        System.out.println("*** DOUBLE Input: " + inputDouble() + " ***");
    }
}

您可以将数字读取为字符串并检查它是否包含"."字符。 这可以使用 Double.parseDouble(String) 进行解析。 当然,您仍然可以输入1.0,并且与输入1.1相同

最新更新