从扫描仪输入的Java接收浮动(Receiving float from Scanner input

2019-10-22 19:33发布

我需要的是应该检查用户的输入是否是一个浮动的方法,如果是字符串或诠释它应该抛出一个异常。

我宣布了扫描仪的方法之外:

    Scanner sc = new Scanner(System.in);

而且该方法的定义是:

private boolean CheckFloat(Scanner sc) throws MyException {
    if(!sc.hasNextFloat()){
        throw new MyException("Wrong type");
    }
    else {
        float input = sc.nextFloat();
        if(input%1==0) {
            throw new MyException("Wrong type");
        }
        else return true;
    }
}

问题是,抛出异常,无论什么用户类型,所以我的问题是:究竟我做错了什么?

我知道,在Java中像1.2的输入被解释为双,但如何从控制台上的浮动呢? 还是我误解方法hasNextFloat()或整个扫描仪的工作?

我还没有发现任何有用到目前为止

Answer 1:

由于您使用nextFloat()你必须确保你进入一个浮点数,否则清除与扫描仪next()

public static void main(String[] args) throws Exception {
    while (true) {
        System.out.print("Enter a float: ");
        try {
            float myFloat = input.nextFloat();
            if (myFloat % 1 == 0) {
                throw new Exception("Wrong type");
            }
            System.out.println(myFloat);
        } catch (InputMismatchException ime) {
            System.out.println(ime.toString());
            input.next(); // Flush the buffer from all data
        }
    }
}

结果:

UPDATE

你仍然需要处理InputMismatchException时,只是把自己的异常catch块。

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    // while (true) just for testing
    while (true) {
        try {
            System.out.print("Enter a float: ");
            System.out.println(CheckFloat(input));
        } catch (MyException me) {
            System.out.println(me.toString());
        }
    }
}

private static float CheckFloat(Scanner sc) throws MyException {
    try {
        float input = sc.nextFloat();
        if (input % 1 == 0) {
            throw new MyException("Wrong type");
        } else {
            return input;
        }
    } catch (InputMismatchException ime) {
        sc.next(); // Flush the scanner

        // Rethrow your own exception
        throw new MyException("Wrong type");
    }
}

private static class MyException extends Exception {
    // You exception details
    public MyException(String message) {
        super(message);
    }
}

结果:



文章来源: Receiving float from Scanner input Java