Java.util.scanner 错误处理

发布于 2024-08-30 15:52:05 字数 385 浏览 4 评论 0原文

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

我们尝试过的:

do {
  int reloop = 0;
  try {
    number = nextInt(); 
  } catch (Exception e) {
    System.out.println ("Please enter a number!");
    reloop ++; 
  }
} while(reloop != 0);

唯一的问题是,如果您输入的不是数字,则会无限循环。

有什么帮助吗?

I'm helping a friend with a java problem. However, we've hit a snag. We're using Java.Util.Scanner.nextInt() to get a number from the user, asking continiously if the user gives anything else. Only problem is, we can't figure out how to do the error handeling.

What we've tried:

do {
  int reloop = 0;
  try {
    number = nextInt(); 
  } catch (Exception e) {
    System.out.println ("Please enter a number!");
    reloop ++; 
  }
} while(reloop != 0);

Only problem is, this loops indefinatly if you enter in something not a number.

Any help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

信愁 2024-09-06 15:52:05

您可以使用 hasNextInt() 来验证如果您执行 nextInt()Scanner 将会成功。如果您想跳过“垃圾”,您还可以调用并丢弃 nextLine()

所以,像这样:

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() 抛出 InputMismatchException 而不是检查 hasNextInt(),就是当它确实抛出异常时,您不会将扫描器推进到有问题的输入之前!这就是为什么你会得到无限循环!

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

You can use hasNextInt() to verify that the Scanner will succeed if you do a nextInt(). You can also call and discard nextLine() if you want to skip the "garbage".

So, something like this:

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 + ")");

See also:


The problem with your code, in addition to the unnecessarily verbose error handling because you let nextInt() throw an InputMismatchException instead of checking for hasNextInt(), is that when it does throw an exception, you don't advance the Scanner past the problematic input! That's why you get an infinite loop!

You can call and discard the nextLine() to fix this, but even better is if you use the exception-free hasNextInt() pre-check technique presented above instead.

恋竹姑娘 2024-09-06 15:52:05

如果数字是非 int ,则会弹出异常,如果不是则重新循环将变为 1 ,并且循环将退出

  int reloop = 0;
  do {
   try {
        number = nextInt();
        reloop ++; 
  } catch (Exception e) {
       System.out.println ("Please enter a number!");
  }}
 while(reloop == 0);

if the number is non-int , exception will pop, if not reloop will become 1 , and loop will exit

  int reloop = 0;
  do {
   try {
        number = nextInt();
        reloop ++; 
  } catch (Exception e) {
       System.out.println ("Please enter a number!");
  }}
 while(reloop == 0);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文