首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java.util.scanner错误处理

Java.util.scanner错误处理
EN

Stack Overflow用户
提问于 2010-04-23 11:40:24
回答 2查看 29.9K关注 0票数 6

我在帮一个朋友解决java的问题。然而,我们遇到了一个障碍。我们使用Java.Util.Scanner.nextInt()从用户那里获取一个数字,不断询问用户是否提供了其他信息。唯一的问题是,我们不知道如何处理错误。

我们尝试过的内容:

代码语言:javascript
复制
do {
  int reloop = 0;
  try {
    number = nextInt(); 
  } catch (Exception e) {
    System.out.println ("Please enter a number!");
    reloop ++; 
  }
} while(reloop != 0);

唯一的问题是,如果你输入的不是数字,这个循环就会无限循环。

有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-23 11:53:28

如果执行Scanner,则可以使用hasNextInt()验证nextInt()是否会成功。如果你想跳过“垃圾”,你也可以调用并丢弃nextLine()

所以,就像这样:

代码语言:javascript
复制
Scanner sc = new Scanner(System.in);
while (!sc.hasNextInt()) {
   System.out.println("int, please!");
   sc.nextLine();
}
int num = sc.nextInt();
System.out.println("Thank you! (" + num + ")");

另请参阅:

除了不必要的冗长错误处理之外,您的代码的问题是,当nextInt()抛出异常时,您不会使Scanner超过有问题的输入!这就是为什么你会得到一个无限循环!

您可以调用并丢弃nextLine()来解决这个问题,但如果您使用上面介绍的无异常hasNextInt()预检查技术,效果会更好。

票数 15
EN

Stack Overflow用户

发布于 2013-07-23 17:15:30

如果数值不是int,则弹出异常,如果不是,reloop将变为1,循环退出

代码语言:javascript
复制
  int reloop = 0;
  do {
   try {
        number = nextInt();
        reloop ++; 
  } catch (Exception e) {
       System.out.println ("Please enter a number!");
  }}
 while(reloop == 0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2696063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档