浮点变量和异常处理
Floating-Point Variables and Exception Handling
我的程序应该接受一个浮点变量然后退出。但是我正在练习一些异常处理的东西并发现了一个问题。每当您在该程序中输入一个字母时,该程序当然会抛出 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()
抛出 InputMismatchException
,则它不会消耗 Scanner
中的令牌。所以当你得到异常和循环时(因为done
仍然是false
),你尝试再次调用nextFloat()
。由于令牌仍然不是可以解析为 float
的值,因此 Scanner
再次抛出异常。一次又一次,令人作呕。
您应该使用 hasNextFloat()
检查是否存在可以解析为 float
值的标记。或者按照 .
的建议使用 Scanner#next()
使用不正确的值
我的程序应该接受一个浮点变量然后退出。但是我正在练习一些异常处理的东西并发现了一个问题。每当您在该程序中输入一个字母时,该程序当然会抛出 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()
抛出 InputMismatchException
,则它不会消耗 Scanner
中的令牌。所以当你得到异常和循环时(因为done
仍然是false
),你尝试再次调用nextFloat()
。由于令牌仍然不是可以解析为 float
的值,因此 Scanner
再次抛出异常。一次又一次,令人作呕。
您应该使用 hasNextFloat()
检查是否存在可以解析为 float
值的标记。或者按照
Scanner#next()
使用不正确的值