例外修羅道 StepFinal:全処理にtryを仕込み、ログに刻め

0004_例外修羅道-stepFinal learn

まずは問題を見ろ

javadrill.tech で出題された問題を見る(StepFinal)


問題のポイント

  • 1件でも落ちたら全部止まる──そんな処理は現場じゃ通用しない。
  • すべてのデータを “1件ずつ try-catch” で安全に処理する構造を組め。
  • 失敗はログに残す、成功は通常処理を続ける。これが「エラーに強いコード」の鉄則や。

まず、日本語で考えろ

文字列の配列 {"20", "0", "abc", "10"} をもらったとする。
これを全部 int に変換して、100 / 変換後の値 をしたい。
でもな:

  • "abc" は変換できへん(→ NumberFormatException
  • "0" はゼロ除算(→ ArithmeticException

じゃあどうする?
1件ずつ try-catch で囲って、何があっても止まらずに全部処理してみせろ。


コメントを書け

// String型の配列をループし、1件ずつ数値に変換して割り算を行う
// NumberFormatException → 数値に変換できなかった
// ArithmeticException → ゼロ除算
// それぞれに応じたエラーメッセージを出し、処理は止めずに続行する

コメントに従ってコードを書け

public class ExceptionUtil {

    public static void processData(String[] inputs) {
        for (String input : inputs) {
            try {
                int value = Integer.parseInt(input);
                int result = 100 / value;
                System.out.println("入力 \"" + input + "\" の結果 → " + result);
            } catch (NumberFormatException e) {
                System.out.println("入力 \"" + input + "\" は数値に変換できませんでした");
            } catch (ArithmeticException e) {
                System.out.println("入力 \"" + input + "\" はゼロによる除算エラーです");
            }
        }
    }
}
public class Main {
    public static void main(String[] args) {
        String[] inputs = {"20", "0", "abc", "10"};
        ExceptionUtil.processData(inputs);
    }
}

実行結果の例

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

コードの解説

  • for 文で1件ずつ処理し、try-catch を内部に仕込むことで、個別に例外処理を適用
  • NumberFormatException"abc" など、数値にできない文字列
  • ArithmeticException"0" を使った割り算
  • 例外が出ても次のループに進む=ロバスト(頑丈)な処理設計になっている

つまづきやすいポイント

  • try-catch をループの外側に書いてしまうと、1件のエラーで全体が止まる
  • catch を分けてないと、「どの例外だったか」区別できない
  • 処理の継続とログの記録は、同時に両立できるように設計する必要がある

// tesh:
// 「落ちたら止まる」コードは、オモチャや。
// オレたちが書くのは「落ちても続ける」「痕跡を残して耐える」コードや。
// 
// 耐えろ。握りつぶせ。前に進め。
// その力を、このFinalステップで仕上げろ。
// 
// Just keep typing, baby.
// 例外処理は、コードの根性や。踏ん張りの設計を、構造で書け。

例外修羅道:全体のステップ構成はこちら