在while循环中处理从Scanner读取整数时出错

我试图捕获一个exception并让它重复,但它只是创建一个无限循环然后崩溃程序…为什么这样做? 我的捕获物有问题吗?

我浏览了网络和stackoverflow,只能找到与我想要实现的内容无关的答案。

boolean bError = true; System.out.println("How many players"); do { try { PLAYERS = input.nextInt(); if(PLAYERS > 5) { System.out.println("maximum of 5"); }//if else { bError = false; } } catch(InputMismatchException e) { System.out.println(e); bError = true; } }while(bError && PLAYERS > 5); 

如果您输入无效的数字,它会进入无限循环,因为无效的令牌仍然留在流上,而nextInt()会一遍又一遍地尝试抓取它。

您必须从流中获取数据。

您可以做的一件事是使用nextLine() ,然后显式尝试将返回的String解析为整数(例如,使用Integer.parseInt() )。

您可以做的另一件事是在exception处理程序中调用input.next() (或input.nextLine() )来读取(并丢弃)垃圾输入。 如果使用默认设置不符合您的要求,您可能必须调整Scanner分隔符才能让next()为您工作。