我尝试捕获异常并让它重复,但它只是创建一个无限循环然后崩溃程序...为什么这样做?我的捕获物有问题吗?
我浏览了网页和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);
答案 0 :(得分:2)
如果您输入无效的号码,它会进入无限循环,因为无效的令牌仍然留在流上,并且nextInt()
一直反复尝试抓取它。
您必须从流中获取数据。
您可以做的一件事是使用nextLine()
,然后明确尝试将返回的String
解析为整数(例如Integer.parseInt()
)。
您可以做的另一件事是在异常处理程序中调用input.next()
(或input.nextLine()
)来读取(并丢弃)垃圾输入。如果Scanner
分隔符无法满足您的默认设置要求,则可能需要调整next()
分隔符才能让{{1}}为您工作。