【问题标题】:Floating-Point Variables and Exception Handling浮点变量和异常处理
【发布时间】:2015-02-07 21:56:39
【问题描述】:

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

如果我使用不同的变量类型,则不会出现此问题,因此我不确定这是逻辑错误还是浮点变量的某些问题。

【问题讨论】:

  • “无限循环”是什么意思?你有任何输出吗?
  • 是的,我一遍又一遍地收到“输入一个数字:呃哦”的说法。

标签: java exception exception-handling floating-point


【解决方案1】:

Float#nextFloat() 不使用Scanner 中的令牌,如果它抛出InputMismatchException。所以当你得到异常并循环时(因为done 仍然是false),你尝试再次调用nextFloat()。由于令牌仍然不是可以解析为float 的值,Scanner 再次引发异常。一次又一次,令人作呕。

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

【讨论】:

  • 值得注意的是,如果hasNextFloat()返回false,输入流应该用next()移动...
  • 非常感谢你们的帮助!我得到了它的工作。
猜你喜欢
  • 2011-01-14
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多