Java 例外情况/尝试捕获-确保用户输入严格为双重&;不仅仅是一个int

Java 例外情况/尝试捕获-确保用户输入严格为双重&;不仅仅是一个int,java,validation,exception,try-catch,wrapper,Java,Validation,Exception,Try Catch,Wrapper,我想知道是否有一种方法可以让我的代码在用户输入方面更加严格 我正在尝试异常/尝试捕获块,并且必须接受一些用户输入并验证它是否是正确的日期类型 有没有一种方法可以让用户输入严格的双精度?i、 e.我不希望用户能够输入没有小数点的值,例如,像5这样的int&将其验证并转换为double,返回5.0-我希望提示用户严格输入double值,确保小数点是输入值的一部分 使用包装器或类似的东西合适吗?如果合适,我该怎么做 当前代码: import java.util.Scanner; public cl

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

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

有没有一种方法可以让用户输入严格的双精度?i、 e.我不希望用户能够输入没有小数点的值,例如,像5这样的int&将其验证并转换为double,返回5.0-我希望提示用户严格输入double值,确保小数点是输入值的一部分

使用包装器或类似的东西合适吗?如果合适,我该怎么做

当前代码:

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(字符串)解析。当然,您仍然可以输入
1.0
,这与输入
1.
1

相同。为什么您不能使用已经存在的异常块
nextDouble
正在进行验证。感谢您的回复。按原样,如果我输入一个非十进制值,例如12,那么我将返回12.0。我想让它拒绝int输入,例如12-&而只接受双输入,例如12.0。我想知道是否有办法使代码严格到所需的程度?谢谢你的回答。你知道是否有可能让它使用包装器/instanceOf技术来做我想让它做的事情吗?@user2904978你说的什么“使用包装器/instanceOf技术”?请给出一个例子。-1因为这个答案假设点(“.”)是基数字符。这并不适用于所有可能的区域设置。我的意思是检查对象引用是否指向特定类,例如:if(obj instanceOf Double)-将double的原始数据类型转换为double的原始包装器类型?我正在处理一些新概念,我不确定