我 try catch 异常并让它重复,但它只是创建了一个无限循环,然后使程序崩溃......为什么要这样做?难道我的捕获有问题吗?
我浏览了网络和 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);
最佳答案
如果您输入无效数字,它会进入无限循环,因为无效 token 仍然保留在流中,并且 nextInt()
会一遍又一遍地尝试获取它。
您必须从流中获取数据。
您可以做的一件事是使用 nextLine()
代替,然后显式尝试将返回的 String
解析为整数(例如使用 Integer.parseInt( )
)。
您可以做的另一件事是在异常处理程序中调用 input.next()
(或 input.nextLine()
),以读取(并丢弃)垃圾输入。如果默认设置不能满足您的要求,您可能需要调整 Scanner
分隔符才能让 next()
为您工作。
关于java - 在 while 循环中处理从 Scanner 读取整数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393156/