Java循环异常

标签 java exception

Scanner b = new Scanner(System.in);

public void menu() {
    while (true) {
        try {
            System.out.println("Your options is:");
            int option = 0;
            option = b.nextInt();
            b.nextLine();

            if (option == 1)
                add();
            else if (option == 2)
                delete();
            else if (option == 3)
                print();
            else if (option == 4)
                nr();
            else if (option == 0)
                break;
        } catch (Exception e) {
            System.out.println("Not a valid option!");
            // break;
        }
    }
    b.close();
}

事情是,每当我提供除所选选项(0,1,2,3,4)之外的其他内容时,该函数都会打印 catch 中的消息,然后请求新选项但这件事却屡屡做。如果存在 break,整个执行就会停止,我想要的只是再次请求一个选项,但没有无限循环。例如,如果我输入“r”而不是数字,它应该捕获异常并通过 while 再次获取。 我错过了什么?

最佳答案

try...catch 的基本目的是try 执行可能抛出异常的代码,如果它确实抛出异常异常,捕获它并处理它。

在这种情况下,无效输入不会引发异常,除非他们设法将一个字符潜入其中,这将导致无限循环。

不要假设用户将输入数字(这是 Scanner#nextInt 通常假设的),而是读取整行,并使用 Integer.parseInt() 构造int

option = Integer.parseInt(b.nextLine());

如果由于有人决定输入“foo”而不是“1”而导致此问题发生,那么您将遇到特殊情况,并且能够再次重新输入值。

关于Java循环异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20042422/

相关文章:

c# - 使用 ViewBag 时出现 RuntimeBinderException

java - 你怎么知道可能有异常(exception)?

java - 打印导致异常错误的特定字符

java - 是否应该允许 GET 请求触发异常?

c++ - 如何在捕获异常后退出程序执行

java - 访问 webdriver 中的子元素

java - 从文本文件读取分割字符串,传递到 ArrayList,然后显示在 JComboBox 中 - Java Swing

java - 更改Java程序中反斜杠指向的根目录

java - 在查询中设置为 null 的准备好的语句不返回任何记录

java - 正则表达式-单字符复数查找java