在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()
为您工作。