由于错误处理不当,导致 Java 中出现无限循环。我该如何解决这个问题?

发布于 2024-12-18 18:24:06 字数 317 浏览 2 评论 0原文

这是我的循环。如果输入非整数,则会无限重复。从我所看到的来看,下一次循环运行时似乎没有清除异常。或者因为它接受先前的输入并将其分配给 menuChoice。我该如何解决这个问题?

while(!console.hasNextInt())
{
    try {
        menuChoice = console.nextInt();
    } catch(InputMismatchException e) {
        System.out.println("The selection you made is invalid.");
    }
}

This is my loop. It repeats endlessly if a non-int is entered. From what I can see, it seems like the exception isn't cleared on the next run of the loop. Or because it takes the previous input and assigns it to menuChoice. How can I fix this?

while(!console.hasNextInt())
{
    try {
        menuChoice = console.nextInt();
    } catch(InputMismatchException e) {
        System.out.println("The selection you made is invalid.");
    }
}

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

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

发布评论

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

评论(2

隐诗 2024-12-25 18:24:06

不要在 while 循环中检查 int,而是检查任何输入标记:

while(console.hasNext()){
  if(console.hasNextInt()){
   try {
        menuChoice = console.nextInt();
    } catch(InputMismatchException e) {
        System.out.println("The selection you made is invalid.");
    }
  }else{
     //throw away non-ints
       console.next();
  }

}

don't check for an int in the while loop, check for any input token:

while(console.hasNext()){
  if(console.hasNextInt()){
   try {
        menuChoice = console.nextInt();
    } catch(InputMismatchException e) {
        System.out.println("The selection you made is invalid.");
    }
  }else{
     //throw away non-ints
       console.next();
  }

}
∝单色的世界 2024-12-25 18:24:06

这可能会更快,因为 hasNextInt()nextInt() 都尝试将下一个标记解析为 int。在此解决方案中,解析仅完成一次:

while(console.hasNext()){
    try {
        menuChoice = console.nextInt();
    } catch(InputMismatchException e) {
        System.out.println("The selection you made is invalid.");
    } finally {
        //throw away non-ints
        console.next();
    }
}

this might be faster because hasNextInt() and nextInt() both try to parse the next token to an int. In this solution the parse is only done once:

while(console.hasNext()){
    try {
        menuChoice = console.nextInt();
    } catch(InputMismatchException e) {
        System.out.println("The selection you made is invalid.");
    } finally {
        //throw away non-ints
        console.next();
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文