从Scanner输入Java接收浮点数

时间:2015-04-24 19:44:09

标签: java floating-point java.util.scanner

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

我在方法之外声明了扫描仪:

    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这样的输入被解释为double,但是如何从控制台获取浮点数呢?或者我是否误解了方法hasNextFloat()或整个Scanner的工作?

到目前为止我还没有找到任何帮助

1 个答案:

答案 0 :(得分:2)

由于您使用的是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
        }
    }
}

结果:

enter image description here

更新

你仍然需要处理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);
    }
}

结果:

enter image description here