浮点变量和异常处理

Chr*_*ell 3 java floating-point exception-handling exception

我的程序应该接受一个浮点变量然后退出.但是,我正在练习一些异常处理的东西,发现了一个问题.每当你在这个程序中输入一个字母时,程序当然会抛出一个InputMismatchException,但它会被卡在无限循环中.我认为我的问题是基于我对try-catch语句和异常处理的误解.

public static void main(String [] args){

    Scanner reader = new Scanner(System.in);
    boolean done = false;

    do{
        try{
            System.out.print("Enter a number: ");
            float number = reader.nextFloat();
            done = true;
        }
        catch (Exception e){
            System.out.println("uh oh");
        }
    }while(!done);
}
Run Code Online (Sandbox Code Playgroud)

如果我使用不同的变量类型,则不会发生此问题,因此我不确定它是逻辑错误还是只是浮点变量的一些时髦.

Sot*_*lis 5

Float#nextFloat()Scanner如果它抛出一个令牌,它不会消耗令牌InputMismatchException.因此,当您获得异常并循环(因为done仍然是false)时,您尝试nextFloat()再次调用.由于令牌仍然不是可以解析为a的值float,因此会Scanner再次抛出异常.又一次又一次,令人作呕.

您应该使用hasNextFloat()检查是否存在可以解析为float值的令牌.或者使用QuirliomScanner#next()建议的不正确的值.