1

我在我的 main 方法中捕获了一个 inputMismatchException,并希望我的 do-while 循环在捕获异常后再次迭代。我什至编写了一个明确的 continue 语句,但这不起作用。我该怎么做?

public class AddressBookApp {

public static void main(String[] args) {
    AddressBook abook = new AddressBook();

    System.out.println("Welcome to the Address Book Application\n");
    Scanner sc = new Scanner(System.in);

    int menuNumber = 4;
    loop:
    do {
        abook.menu();

        try{
            menuNumber = sc.nextInt();
            System.out.println();

            if (menuNumber < 1 || menuNumber > 4){
                System.out.println("Please enter a valid menu number\n");
            } else if (menuNumber == 1) {
                abook.printEntries();
            } else if (menuNumber == 2) {
                abook.addEntry();
            } else if (menuNumber == 3) {
                abook.removeEntry();
            } else {
                System.out.println("Thanks!  Goodbye.");
                sc.close();
                return;
            }


        } catch (InputMismatchException ime) {
            System.out.println("Please enter an integer");
            sc.next();

            continue loop;
        }

    } while (menuNumber != 4);
    sc.close();
  } 
}
4

4 回答 4

4

你留下menuNumber等于 4,这是你的循环的终止条件。当然你的循环会结束。

于 2013-01-04T22:57:12.867 回答
1

您将 menuNumber 初始化为 4,但在出现异常时不要更改它。循环确实尝试继续,但由于语句menuNumber != 4为假而退出。

int menuNumber = 4;
loop:
do {
    abook.menu();

    try{
        menuNumber = sc.nextInt();
        System.out.println();

        if (menuNumber < 1 || menuNumber > 4){
            System.out.println("Please enter a valid menu number\n");
        } else if (menuNumber == 1) {
            abook.printEntries();
        } else if (menuNumber == 2) {
            abook.addEntry();
        } else if (menuNumber == 3) {
            abook.removeEntry();
        } else {
            System.out.println("Thanks!  Goodbye.");
            sc.close();
            return;
        }


    } catch (InputMismatchException ime) {
        System.out.println("Please enter an integer");
        sc.next();

        continue loop;
    }

} while (menuNumber != 4);
于 2013-01-04T23:01:27.350 回答
0

试试这个

  } catch (InputMismatchException ime) {
    if (fatal(ime)) {
        throw ime;
    } else {
        // try again
        continue;
    }
于 2013-01-04T23:01:11.847 回答
0

循环不会继续,因为抛出了类型为 OTHER 而非 InputMistmatchException 的异常。将捕获更改为:

catch (Exception e)

或至少添加所有包含捕获条件。

更好的解决方案是准确检查引发了哪些异常以及引发异常的原因,然后修复导致异常的问题。理论上,使用 continue 语句进行全方位捕获可能会导致无限循环,因为 menuNumber 不会递增。

于 2013-01-04T23:05:38.410 回答