103 「例外修羅道」 Step04 問題

問題

あなたは、配列の要素を取り出して割り算をするメソッドを作成しようとしています。
この処理では次の2つの例外が発生する可能性があります:

  • 配列のインデックスが範囲外 → ArrayIndexOutOfBoundsException
  • ゼロ除算 → ArithmeticException

この2つの例外は、どちらも RuntimeExceptionException を継承しています。
このステップでは、Exception クラスでまとめて例外を捕捉し、
例外が発生しました: (例外メッセージ) という形式で出力してください。


要件

  • catch (Exception e) で2種類の例外をまとめて捕まえること
  • 発生した例外のメッセージを出力すること(e.getMessage() を使う)
  • 正常な場合は、要素と計算結果を出力すること

出力形式

  • 正常時: 選ばれた値: 20 計算結果: 4
  • 例外発生時: 例外が発生しました: / by zero

テストコード(Main.java)

public class Main {
  public static void main(String[] args) {
    int[] numbers = {10, 20, 30};
    ExceptionUtil.safeProcess(numbers, 1, 5);   // 正常
    ExceptionUtil.safeProcess(numbers, 3, 2);   // 配列外アクセス
    ExceptionUtil.safeProcess(numbers, 0, 0);   // ゼロ除算
  }
}

ヒント

  • catch (Exception e) にすることで、すべての例外を一括で処理できる
  • e.getMessage() を使えば、例外が持っているメッセージを取得できる
  • 実際の開発現場でも、「例外の種類を気にせずログだけ残す」という処理で使われることがある

解答例

103 ステップアップ問題 「例外修羅道」