检查输入是否为数字时出现逻辑错误,如果不是,则重新请求用户输入直到有效
logical error while Checking Whether the input was numeric, if not re-request users input until valid
当输入无效输入时,它会转到 catch 块并无限执行 catch 块,而不会循环回 try 块以获取另一个输入
输入有效数据时有效
public static double getInputNumber(Scanner input){
double num=0;
while(true) {
try {
num = input.nextDouble();
return num;
} catch (Exception ex) {
System.out.println("Invalid value entered.. Enter again : ");
}
}
}
预期 - 当输入无效值时,向用户显示错误消息并重新输入,直到用户输入有效值。
实际 - 当输入无效值时,它会在屏幕上重复显示错误消息而无需重新输入
只需添加 input.next()
} catch (Exception ex) {
System.out.println("Invalid value entered.. Enter again : ");
input.next();
}
input.next() 清除扫描仪。
很可能是输入已关闭,或者 input
中的下一个标记不是双精度。这些中的任何一个都会导致抛出异常,而不推进输入,从而导致无限循环。
所以你需要找出错误的原因,采取适当的行动 - 例如,像:
public static double getInputNumber(Scanner input){
double num=0;
while(true) {
try {
num = input.nextDouble();
return num;
} catch (InputMismatchException ex) {
System.out.println("Invalid value entered.. Enter again : ");
} catch (NoSuchElementException ex) {
System.out.println("Input exhausted ");
return 0;
} catch (IllegalStateException ex) {
System.out.println("Scanner closed ");
return 0;
}
}
}
}
您也可以在调用 nextDouble()
之前使用 input.hasNextDouble()
检查
当输入无效输入时,它会转到 catch 块并无限执行 catch 块,而不会循环回 try 块以获取另一个输入
输入有效数据时有效
public static double getInputNumber(Scanner input){
double num=0;
while(true) {
try {
num = input.nextDouble();
return num;
} catch (Exception ex) {
System.out.println("Invalid value entered.. Enter again : ");
}
}
}
预期 - 当输入无效值时,向用户显示错误消息并重新输入,直到用户输入有效值。
实际 - 当输入无效值时,它会在屏幕上重复显示错误消息而无需重新输入
只需添加 input.next()
} catch (Exception ex) {
System.out.println("Invalid value entered.. Enter again : ");
input.next();
}
input.next() 清除扫描仪。
很可能是输入已关闭,或者 input
中的下一个标记不是双精度。这些中的任何一个都会导致抛出异常,而不推进输入,从而导致无限循环。
所以你需要找出错误的原因,采取适当的行动 - 例如,像:
public static double getInputNumber(Scanner input){
double num=0;
while(true) {
try {
num = input.nextDouble();
return num;
} catch (InputMismatchException ex) {
System.out.println("Invalid value entered.. Enter again : ");
} catch (NoSuchElementException ex) {
System.out.println("Input exhausted ");
return 0;
} catch (IllegalStateException ex) {
System.out.println("Scanner closed ");
return 0;
}
}
}
}
您也可以在调用 nextDouble()
input.hasNextDouble()
检查