103 「例外修羅道」 StepFinal 解答例

ExceptionUtil.java

public class ExceptionUtil {

    public static void processData(String[] inputs) {
        for (String input : inputs) {
            try {
                // 入力を整数に変換
                int value = Integer.parseInt(input);

                // 100をvalueで割って結果を出力
                int result = 100 / value;
                System.out.println("入力 \"" + input + "\" の結果 → " + result);

            } catch (NumberFormatException e) {
                // 数値に変換できなかった場合の処理
                System.out.println("入力 \"" + input + "\" は数値に変換できませんでした");

            } catch (ArithmeticException e) {
                // ゼロによる除算が発生した場合の処理
                System.out.println("入力 \"" + input + "\" はゼロによる除算エラーです");
            }
        }
    }
}

解説:複数処理の個別 try-catch による安全実行

このステップでは、複数の入力に対して、1件ずつ例外処理を行いながら安全に処理を継続するテクニックを学びます。


ポイント1:ループごとに try-catch を分ける

for (String input : inputs) {
    try {
        // 個別の例外処理
    } catch (...) {
        ...
    }
}

このようにすることで、1件で例外が発生しても、他のデータに影響を与えず処理が続行できます。


ポイント2:複数 catch によるエラー分類

  • NumberFormatException → 文字列が整数に変換できない
  • ArithmeticException → ゼロ除算などの算術エラー

適切な例外ごとにメッセージを分けることで、ログやエラー表示がより明確になります。


出力例(テストコードによる結果)

入力 "20" の結果 → 5
入力 "0" はゼロによる除算エラーです
入力 "abc" は数値に変換できませんでした
入力 "10" の結果 → 10

まとめ:このステップで学ぶべきこと

  • 複数の例外が起きうる処理を、1件ずつ安全に実行する構造を作る
  • 処理の途中でエラーがあっても、他の処理を続けることが重要
  • catch を分けて、エラーの種類に応じたメッセージやログを出力する

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


Just Keep Typing, Baby!では、この「例外修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!

// tesh:
// この一歩を踏み外すと、しばらく地獄。今、整地しとけ。