浮点变量和异常处理

3

我的程序应该接受一个浮点变量并退出。但是,我正在练习一些异常处理的内容,并发现了一个问题。每当您在此程序中输入一个字母时,程序会抛出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);
}

如果我使用不同的变量类型,这个问题就不会出现,所以我不确定它是逻辑错误还是浮点变量的一些奇怪问题。


1
你说的“无限循环”是什么意思?你有得到任何输出吗? - k_g
是的,我一遍又一遍地得到了“输入一个数字:嗯哦”的语句。 - Christopher Bell
1个回答

5
Float#nextFloat() 方法在抛出 InputMismatchException 异常时不会消耗 Scanner 中的标记。所以当您收到异常并循环(因为 done 仍然为 false),您会尝试再次调用 nextFloat()。由于标记仍不是可以解析为 float 的值,Scanner 再次抛出异常。一遍又一遍,让人厌烦。
您应该使用 hasNextFloat() 来检查是否存在可解析为 float 值的标记。或者像 Quirliom 建议的那样,使用 Scanner#next() 消耗不正确的值。

值得注意的是,如果hasNextFloat()返回false,则应使用next()移动输入流... - Sinkingpoint
非常感谢你们的帮助!我已经把它搞定了。 - Christopher Bell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接