如何安全扫描整数输入?

Max*_*xpm 5 java exception input infinite-loop java.util.scanner

Scanner scanner = new Scanner();
int number = 1;

do
{
    try
    {
        option = scanner.nextInt();
    }
    catch (InputMismatchException exception)
    {
        System.out.println("Integers only, please.");
    }
}
while (number != 0);
Run Code Online (Sandbox Code Playgroud)

尽管存在异常处理,但在给出非整数输入时,此代码将进入无限循环.它不是Scanner暂停在下一次迭代中收集输入,而是继续抛出InputMismatchExceptions直到程序被杀死.

扫描整数(或其他类型,我猜)输入,丢弃无效输入并正常继续循环的最佳方法是什么?

sam*_*ack 5

将您的代码更改为此

catch (InputMismatchException exception) 
{ 
    System.out.println("Integers only, please."); 
    scanner.nextLine();
} 
Run Code Online (Sandbox Code Playgroud)


Cha*_*dNC 5

在尝试将输入的值分配给int之前,应检查输入是否可以解析为int。您不应使用异常来确定输入是否正确,这是错误的做法,应避免使用。

if(scanner.hasNextInt()){
   option = scanner.nextInt();
}else{
   System.out.printLn("your message");
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以检查输入是否可以解释为int,如果可以,则分配值,如果不能,则显示消息。调用该方法不会使扫描仪前进。