1

メイン メソッドで 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 に答える
0

InputMistmatchException 以外のタイプの例外がスローされているため、ループは続行されません。キャッチを次のように変更します。

catch (Exception e)

または、少なくともすべての包括的なキャッチ条件を追加します。

より良い解決策は、スローされている例外とその理由を正確に調べてから、例外の原因となっている問題を修正することです。理論的には、continue ステートメントで包括的な catch を使用すると、menuNumber がインクリメントされないため、無限ループが発生する可能性があります。

于 2013-01-04T23:05:38.410 に答える
0

これを試して

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