Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 浮点变量和异常处理_Java_Exception_Exception Handling_Floating Point - Fatal编程技术网

Java 浮点变量和异常处理

Java 浮点变量和异常处理,java,exception,exception-handling,floating-point,Java,Exception,Exception Handling,Floating Point,我的程序应该接受一个浮点变量,然后退出。然而,我正在练习一些异常处理的东西,发现了一个问题。当你在这个程序中输入一个字母时,程序当然会抛出一个InputMismatchException,但它会被卡在一个无限循环中。我假设我的问题是基于我对try-catch语句和异常处理的误解 public static void main(String [] args){ Scanner reader = new Scanner(System.in); boolean done = fals

我的程序应该接受一个浮点变量,然后退出。然而,我正在练习一些异常处理的东西,发现了一个问题。当你在这个程序中输入一个字母时,程序当然会抛出一个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);
}
如果我使用不同的变量类型,则不会出现此问题,因此我不确定这是逻辑错误还是浮点变量的问题

Float#nextFloat()
如果抛出
输入不匹配异常,则不会使用
扫描仪中的令牌。因此,当您得到异常和循环时(因为
done
仍然是
false
),您将尝试再次调用
nextFloat()
。由于标记仍然不是可以解析为
浮点值的值,
扫描仪再次抛出异常。一次又一次,令人作呕


您应该使用
hasNextFloat()
检查是否存在可以解析为
float
值的令牌。或者使用
Scanner#next()
使用不正确的值,正如所建议的那样。

什么是“无限循环”?你得到输出了吗?是的,我一次又一次地得到“输入一个数字:呃哦”的语句。值得注意的是,如果
hasNextFloat()
返回false,输入流应该继续使用
next()
…非常感谢你们的帮助!我让它工作了。