繁体   English   中英

捕获异常后继续循环

[英]Resume loop after caught exception

我在主方法中捕获了inputMismatchException,并希望在捕获异常后再次进行do-while循环。 我什至编写了一个明确的继续语句,但是没有用。 我该怎么办?

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();
  } 
}

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

您已将menuNumber初始化为4,但是在发生异常的情况下请勿将其更改。 该循环确实尝试继续,但是由于语句menuNumber != 4为false而退出。

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

尝试这个

  } catch (InputMismatchException ime) {
    if (fatal(ime)) {
        throw ime;
    } else {
        // try again
        continue;
    }

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

catch (Exception e)

或至少加上所有涵盖的捕获条件。

更好的解决方案是准确检查引发了什么异常及其原因,然后解决导致异常的问题。 从理论上讲,使用continue语句包含所有包含的内容可能会导致无限循环,因为menuNumber不会增加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM