1. ホーム
  2. java

[解決済み] Java の try catch で IndexOutOfBoundsException が処理されない。

2022-02-16 14:20:30

質問

JavaでListのIndexOutOfBoundsExceptionをキャッチしようとしたときに問題が発生しました。そこで、2つの要素を持つ私のリストを次のように宣言しました。

List<String> list = new ArrayList<>(Arrays.asList("item1", "item2"));

そして、トライキャッチをやってみました。

do {
    for (int i = 0; i < list.size(); i++) {
        System.out.print("(" + (i + 1) + ")" + list.get(i));
    }
    System.out.println(" ");

    try{
        option = sc.nextInt();
    } catch (IndexOutOfBoundsException e){
        System.out.println("Invalid option");
        sc.next();
        continue;
    } catch (InputMismatchException e) {
        System.out.println("Option input mismatch.");
        sc.next();
        continue;
    } 
    sc.nextLine();
    if (option == 1) {
        System.out.print("Enter name: ");
        // scanner takes in input
    } else if (option == 2) {
        System.out.print("Enter desc: ");
        // scanner takes in input
    }
type = list.get((option - 1));
} while (option <= 0 || option >= 3);

しかし、オプションに2より大きいものを入力すると、IndexOutOfBounds例外がスローされましたが、すでにトライキャッチをしたはずなのですが?

よろしくお願いします。

どのように解決するのですか?

    do {
        for (int i = 0; i < list.size(); i++) {
            System.out.print("(" + (i + 1) + ")" + list.get(i));
        }
        System.out.println(" ");

        try {
            option = sc.nextInt();
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Invalid option");
            sc.next();
            continue;
        } catch (InputMismatchException e) {
            System.out.println("Option input mismatch.");
            sc.next();
            continue;
        }
        sc.nextLine();
        if (option == 1) {
            System.out.print("Enter name: ");
            // scanner takes in input
        } else if (option == 2) {
            System.out.print("Enter desc: ");
            // scanner takes in input
        }
        try {
            type = list.get((option - 1));
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Invalid option");
            option=3;
        }
    } while (option <= 0 || option >= 3);

type = list.get((option - 1))で新しいtry-catchを追加しています。 オプションの再入力を強制するために、キャッチでオプションを3に設定します。