java.util.Scanner:为什么我的nextDouble()不提示?
抛出InputMismatchException后,为什么我的程序不提示输入D因为如果扫描器.nextDouble()失败,它会将令牌留在队列上(然后会一次又一次地读取令牌,导致它一次又一次地失败) 请尝试以下操作:java.util.Scanner:为什么我的nextDouble()不提示?,java,java.util.scanner,Java,Java.util.scanner,抛出InputMismatchException后,为什么我的程序不提示输入D因为如果扫描器.nextDouble()失败,它会将令牌留在队列上(然后会一次又一次地读取令牌,导致它一次又一次地失败) 请尝试以下操作: import java.util.*; public class June16{ public static void main(String[] args){ Scanner kb = new Scanner(System.in); do
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时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌
这就是为什么如果您没有输入有效的double,您将进入一个无限循环。处理异常时,使用
kb.next()
移动到下一个标记,这是因为nextDouble将采用您输入的十进制数字,但仍有一个您输入的回车符未被扫描仪读取。下次循环时,它将读取输入,但请稍候!那里有一辆马车返回,所以。。。不需要扫描任何东西。它只处理回车。当然,程序发现它不是double,因此您会得到一个异常。
你怎么修理它?好的,让它扫描下一个double(即next())留下的任何剩余内容,然后再次扫描下一个double
try {
// ...
} catch (InputMismatchException ime) {
kb.next(); // eat the malformed token.