import java.util.*;
public class June16{
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
double b=0;
boolean checkInput = true;
do{
try{
System.out.println("Input b : ");
b = kb.nextDouble();
checkInput = false;
}catch(InputMismatchException ime){
}
}while(checkInput);
}
}
抛出InputMismatchException后,为什么我的程序没有提示输入? :d
答案 0 :(得分:4)
当扫描程序抛出InputMismatchException时,扫描程序将不会传递导致异常的标记,因此可以通过其他方法检索或跳过它。
这就是为什么如果你没有输入有效的双重结果,你最终会陷入无限循环。处理异常时,请使用kb.next()
移至下一个标记。
答案 1 :(得分:2)
因为如果Scanner.nextDouble()
失败,它会将令牌留在队列上(然后再次读取,然后再一次失败)。
尝试以下方法:
try {
// ...
} catch (InputMismatchException ime) {
kb.next(); // eat the malformed token.
}
答案 2 :(得分:1)
这是因为nextDouble将采用您输入的十进制数字,但仍然存在您输入的回车符,扫描仪未读取该回车符。下次循环时它会读取输入,但是等等!那里有回车,所以......不需要扫描任何东西。它只是处理回车。当然,程序发现它不是双倍的,所以你得到一个例外。 你是如何解决的?好吧,有东西可以扫描nextDouble留下的剩余物(即下一个()),然后再次扫描下一个双倍。