/** * ドメイン非依存URL出力フィルタ * javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい * * データベースには絶対URL(https://minner.asia)を保持し、 * 表示時に現在のドメイン(home_url())に動的変換する */ function javadrill_make_urls_dynamic($content) { if (empty($content)) { return $content; } // データベース内の絶対URLを現在のhome_url()に置換 $old_url = 'https://minner.asia'; $new_url = untrailingslashit(home_url()); // http版も対応(念のため) $content = str_replace($old_url, $new_url, $content); $content = str_replace('http://minner.asia', $new_url, $content); return $content; } // 投稿本文、ウィジェット、タームの説明、抜粋に適用 add_filter('the_content', 'javadrill_make_urls_dynamic', 20); add_filter('widget_text', 'javadrill_make_urls_dynamic', 20); add_filter('term_description', 'javadrill_make_urls_dynamic', 20); add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20); 解答例 | Javaドリル https://minner.asia 楽々学べるJavaの問題集 Fri, 05 Sep 2025 01:55:31 +0000 ja hourly 1 https://wordpress.org/?v=6.8.3 https://minner.asia/wp-content/uploads/2023/10/cropped-logo-32x32.png 解答例 | Javaドリル https://minner.asia 32 32 103 「例外修羅道」 StepFinal 解答例 https://minner.asia/archives/5102 https://minner.asia/archives/5102#respond Sun, 25 May 2025 22:55:57 +0000 http://localhost/?p=5102 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:
// この一歩を踏み外すと、しばらく地獄。今、整地しとけ。

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

]]>
https://minner.asia/archives/5102/feed 0
103 「例外修羅道」 Step09 解答例 https://minner.asia/archives/5094 https://minner.asia/archives/5094#respond Sun, 25 May 2025 22:51:24 +0000 http://localhost/?p=5094 ExceptionUtil.java
public class ExceptionUtil {

    public static void traceError(int[] array, int index, int divisor) {
        try {
            // 指定されたインデックスの値を取り出し、割り算を行う
            int value = array[index];
            int result = value / divisor;
            System.out.println("計算結果: " + result);
        } catch (Exception e) {
            // エラー発生時に詳細情報を出力
            System.out.println("エラーが発生しました");
            System.out.println("原因: " + e.getMessage());
            e.printStackTrace(); // スタックトレースを出力(開発用)
        }
    }
}

解説:例外の原因を追跡する3つの情報

このステップでは、例外が発生したときにその詳細をログ出力する方法を学びます。


1. 固定メッセージ

System.out.println("エラーが発生しました");

ユーザー向けやログ監視用の基本的なアラート表示。


2. getMessage() で原因を要約

System.out.println("原因: " + e.getMessage());
  • / by zero ã‚„ Index 5 out of bounds for length 3 のように、エラーの主な内容を表示
  • ユーザーへの表示や、簡易ログに向いている

3. printStackTrace() で技術者向け詳細ログ

e.printStackTrace();
  • 例外が「どこで発生したか」までわかる
  • 開発中のデバッグや、ログファイルへの出力に有効
  • 本番環境ではログライブラリ(Log4j など)と連携してファイル出力するのが一般的

出力例(エラー時)

エラーが発生しました
原因: / by zero
java.lang.ArithmeticException: / by zero
    at ExceptionUtil.traceError(ExceptionUtil.java:5)
    ...

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

  • 例外発生時に何が起きたかをユーザーにも開発者にも伝える手段を持つことが重要
  • getMessage() と printStackTrace() を組み合わせて、適切なレベルの情報提供ができるようにする
  • 開発現場では、これらの出力をログファイルに残す設計が基本

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


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

// tesh:
// コードは書けた。でも、それだけで終わっていいのか?

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

]]>
https://minner.asia/archives/5094/feed 0
103 「例外修羅道」 Step08 解答例 https://minner.asia/archives/5086 https://minner.asia/archives/5086#respond Sun, 25 May 2025 22:45:49 +0000 http://localhost/?p=5086 MyAppException.java
// 独自の例外クラスを定義
public class MyAppException extends Exception {

    // コンストラクタでメッセージを受け取り、親クラスに渡す
    public MyAppException(String message) {
        super(message);
    }
}

ExceptionUtil.java

public class ExceptionUtil {

    public static void checkCode(int code) throws MyAppException {
        if (code == 999) {
            // 条件に合致した場合に独自例外をスロー
            throw new MyAppException("コード999は使用できません");
        }

        // 正常な場合はコードを出力
        System.out.println("コード: " + code);
    }
}

Main.java(再掲)

public class Main {
  public static void main(String[] args) {
    try {
      ExceptionUtil.checkCode(100);  // 正常
      ExceptionUtil.checkCode(999);  // 独自例外をスロー
    } catch (MyAppException e) {
      System.out.println("独自例外発生: " + e.getMessage());
    }
  }
}


解説:独自例外の定義と活用

このステップでは、業務固有の状況を表現するための例外クラスを自分で作る方法を学びます。


独自例外を作る理由

標準の IllegalArgumentException や NullPointerException では表現しきれないような
アプリケーション特有のエラー状態に名前と意味を与えるために、独自例外を定義します。

public class MyAppException extends Exception {
    public MyAppException(String message) {
        super(message);
    }
}

出力例

ExceptionUtil.checkCode(100);
// → コード: 100

ExceptionUtil.checkCode(999);
// → 独自例外発生: コード999は使用できません

補足:throws との併用

MyAppException はチェック例外(Exception のサブクラス)なので、
メソッドシグネチャに throws MyAppException をつける必要があります。


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

  • Exception を継承すれば、自分だけの例外クラスを定義できる
  • 業務ルールに合った例外を作ることで、コードの意図やエラーの意味が明確になる
  • チェック例外であれば、throws を忘れずに書く必要がある

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


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

// tesh:
// 「え、なんで?」ってなったやろ?それ、ここ。

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

]]>
https://minner.asia/archives/5086/feed 0
103 「例外修羅道」 Step07 解答例 https://minner.asia/archives/5077 https://minner.asia/archives/5077#respond Sun, 25 May 2025 22:40:00 +0000 http://localhost/?p=5077 ExceptionUtil.java
public class ExceptionUtil {

    public static void checkAge(int age) {
        if (age < 0) {
            // 年齢が0未満の場合は、例外を自ら発生させる
            throw new IllegalArgumentException("年齢は0以上でなければなりません");
        }

        // 正常な場合は年齢を出力
        System.out.println("å¹´é½¢: " + age);
    }
}

解説:条件によって throw する例外

このステップでは、不正な入力を検知したら自分で例外を発生させる設計を学びます。


throw は例外を作って投げる

throw new IllegalArgumentException("メッセージ");

この文によって、現在のメソッドの実行を強制的に中断し、呼び出し元に例外を投げることができます。


IllegalArgumentException とは?

  • Javaに標準で用意されている実行時例外(RuntimeException のサブクラス)
  • 「渡された引数が不正ですよ」という意味を持つ
  • 開発現場でも、バリデーションエラーの定番として頻繁に使われる

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

ExceptionUtil.checkAge(25);
// → 年齢: 25

ExceptionUtil.checkAge(-5);
// → エラー: 年齢は0以上でなければなりません

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

  • throw 文で、プログラムの中から能動的に例外を発生させることができる
  • 不正な状態を例外として扱うことで、堅牢で明快なロジックが書けるようになる
  • 引数チェックや値の制限が必要なときには、IllegalArgumentException を使うのが一般的

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


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

// tesh:
// 今ならまだ笑える。詰まってから読むよりマシ。

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

]]>
https://minner.asia/archives/5077/feed 0
103 「例外修羅道」 Step06 解答例 https://minner.asia/archives/5069 https://minner.asia/archives/5069#respond Sun, 25 May 2025 22:35:16 +0000 http://localhost/?p=5069 ExceptionUtil.java
public class ExceptionUtil {

    // このメソッドは例外をスローする可能性があると宣言
    public static void riskyMethod() throws Exception {
        // 明示的に例外を発生させる
        throw new Exception("危険な処理です");
    }
}

Main.java(再掲)

public class Main {
  public static void main(String[] args) {
    try {
      ExceptionUtil.riskyMethod();
    } catch (Exception e) {
      System.out.println("エラーを受け取りました: " + e.getMessage());
    }
  }
}

解説:throws 宣言と throw 文の違い

このステップでは、例外処理の責任を呼び出し元に委ねる設計を学びます。


throws 宣言とは?

メソッドに throws を書くことで、「このメソッドは例外を投げる可能性があります」と呼び出し側に伝えます。

public void method() throws Exception {
    // 例外を投げる可能性がある
}

throw 文とは?

throw は実際に例外を発生させる文です。

throw new Exception("メッセージ");

呼び出し側の責任

throws で宣言されたメソッドを使うときは、呼び出し元で try-catch によって例外を処理する必要があります。
処理しない場合は、さらに上位へ例外を伝播させなければなりません(今回は main で完結)。


出力例

エラーを受け取りました: 危険な処理です

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

  • throws は「例外が発生しうるメソッドですよ」と呼び出し元に警告する仕組み
  • throw は実際に例外を作って投げる操作
  • 呼び出し側で try-catch することで、安全な例外処理が可能になる

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


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

// tesh:
// 納得したフリは卒業しようぜ。ここで本物の理解を。

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

]]>
https://minner.asia/archives/5069/feed 0
103 「例外修羅道」 Step05 解答例 https://minner.asia/archives/5060 https://minner.asia/archives/5060#respond Sun, 25 May 2025 22:29:07 +0000 http://localhost/?p=5060 ExceptionUtil.java
public class ExceptionUtil {

    public static void computeAndCleanup(int a, int b) {
        try {
            // 割り算を実行
            int result = a / b;
            System.out.println("計算結果: " + result);
        } catch (ArithmeticException e) {
            // ゼロ除算が発生した場合の処理
            System.out.println("エラー: ゼロによる除算です");
        } finally {
            // エラーの有無にかかわらず必ず実行される
            System.out.println("終了処理を実行しました");
        }
    }
}

解説:finally ブロックの基本

このステップでは、finally ブロックの役割と使い方を学びます。


finally とは?

try-catch-finally 構文における finally は、例外の発生に関係なく、最後に必ず実行されるブロックです。
ファイルを閉じる、接続を切る、ログを出力する、などの「後始末処理」でよく使われます。


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

computeAndCleanup(20, 5);
// → 計算結果: 4
// → 終了処理を実行しました

computeAndCleanup(10, 0);
// → エラー: ゼロによる除算です
// → 終了処理を実行しました

注意点

  • finally ブロックは、return が呼ばれても実行される
  • System.exit() を呼び出した場合などは例外的に実行されない

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

  • finally を使えば、例外が起きても後始末を漏らさないコードが書ける
  • 例外処理は「異常系の対処」だけでなく、「正常に終了させるための構造」でもある

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


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

// tesh:
// 不安の種は、今つぶすのが正解。解説あるから。
]]>
https://minner.asia/archives/5060/feed 0
103 「例外修羅道」 Step03 解答例 https://minner.asia/archives/5038 https://minner.asia/archives/5038#respond Sun, 25 May 2025 22:16:18 +0000 http://localhost/?p=5038 ExceptionUtil.java
public class ExceptionUtil {

    public static void process(int[] array, int index, int divisor) {
        try {
            // 配列から要素を取り出す
            int value = array[index];
            System.out.println("選ばれた値: " + value);

            // 割り算を実行する
            int result = value / divisor;
            System.out.println("計算結果: " + result);

        } catch (ArrayIndexOutOfBoundsException e) {
            // 配列のインデックスが範囲外の場合
            System.out.println("エラー: インデックスが範囲外です");

        } catch (ArithmeticException e) {
            // ゼロ除算が発生した場合
            System.out.println("エラー: ゼロによる除算です");
        }
    }
}

解説:複数の例外に個別対応する

このステップでは、1つのメソッド内で複数の例外が発生しうる処理に対して、それぞれ別々の catch ブロックで対応する方法を学びます。


なぜ catch を分ける必要があるのか?

異なる種類のエラーに対して、それぞれ異なる対処をしたい場合、
catch を個別に書くことで、エラー内容に応じた処理分岐が可能になります。

try {
    // 複数の危険な処理
} catch (ExceptionTypeA e) {
    // エラーAに対する処理
} catch (ExceptionTypeB e) {
    // エラーBに対する処理
}

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

ExceptionUtil.process(new int[]{10, 20, 30}, 2, 10);
// → 選ばれた値: 30
// → 計算結果: 3

ExceptionUtil.process(new int[]{10, 20, 30}, 5, 2);
// → エラー: インデックスが範囲外です

ExceptionUtil.process(new int[]{10, 20, 30}, 1, 0);
// → 選ばれた値: 20
// → エラー: ゼロによる除算です

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

  • try ブロックの中で複数の例外が発生する可能性がある処理をまとめて記述できる
  • catch を分けることで、エラーごとに異なる対応ができる
  • 安全に処理を継続しながら、適切なエラーメッセージを出力できる構造を作るのがこのステップの目的

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


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

// tesh:
// 動いた=理解できた、とは限らない。こっちで整えよう。

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

]]>
https://minner.asia/archives/5038/feed 0
103 「例外修羅道」 Step02 解答例 https://minner.asia/archives/5032 https://minner.asia/archives/5032#respond Sun, 25 May 2025 22:10:08 +0000 http://localhost/?p=5032 ExceptionUtil.java
public class ExceptionUtil {

    public static void printElement(int[] array, int index) {
        try {
            // 指定されたインデックスの要素を取得し出力
            int value = array[index];
            System.out.println("選ばれた値: " + value);
        } catch (ArrayIndexOutOfBoundsException e) {
            // 配列の範囲外にアクセスした場合のエラー処理
            System.out.println("エラー: インデックスが範囲外です");
        }
    }
}

解説:ArrayIndexOutOfBoundsException の基本

このステップでは、配列に存在しないインデックスを指定した場合に発生する例外
ArrayIndexOutOfBoundsException を安全に処理する方法を学びます。


どんなときに起きるのか?

Javaの配列は、0から始まるインデックスでアクセスします。

int[] arr = {10, 20, 30}; // 長さ3 → 有効なindexは 0, 1, 2

上記の配列に対して arr[3] とアクセスすると、存在しない要素にアクセスしたとして ArrayIndexOutOfBoundsException がスローされます。


try-catch の使いどころ

このような「使う前に確認すべき処理」をそのまま書くと、実行時にエラーで止まってしまいます。
しかし try-catch を使えば、プログラムを止めずに、エラーメッセージを出力して処理を継続できます。


出力例と動作確認

int[] numbers = {10, 20, 30};

ExceptionUtil.printElement(numbers, 1); // → 選ばれた値: 20
ExceptionUtil.printElement(numbers, 3); // → エラー: インデックスが範囲外です
ExceptionUtil.printElement(numbers, 0); // → 選ばれた値: 10

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

  • 配列のインデックスは範囲外アクセスで例外が発生する
  • ArrayIndexOutOfBoundsException ã‚’ try-catch で捕捉すれば、安全なアクセスが可能になる
  • ユーザーに適切なフィードバックを与えることで、アプリケーションの信頼性を高められる

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


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

// tesh:
// これ、見逃すと変なクセつくぞ。読んどこ。

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

]]>
https://minner.asia/archives/5032/feed 0
103 「例外修羅道」 Step01 解答例 https://minner.asia/archives/5025 https://minner.asia/archives/5025#respond Sun, 25 May 2025 21:59:52 +0000 http://localhost/?p=5025 ExceptionUtil.java
public class ExceptionUtil {

    public static void divide(int a, int b) {
        try {
            // 商を計算し、結果を出力
            int result = a / b;
            System.out.println("計算結果: " + result);
        } catch (ArithmeticException e) {
            // b が 0 の場合のエラー処理
            System.out.println("エラー: ゼロによる除算です");
        }
    }
}

解説:ArithmeticException の基本

この問題では、ゼロによる除算(a / 0)が行われたときに例外が発生することを確認し、それを安全に処理する方法を学ぶことが目的です。


例外とは何か?

例外(Exception)は、プログラムの実行中に発生する異常な状態のことです。
たとえば「0で割る」「存在しない配列の要素にアクセスする」「nullにアクセスする」といったケースが該当します。

このステップでは、ArithmeticException という「算術計算でエラーが起きた場合の例外」を扱います。


try-catch構文の基本

try {
    // 例外が発生する可能性のある処理
} catch (ExceptionType e) {
    // 例外が発生したときの処理
}

この構文を使うことで、例外が発生してもプログラムが止まらずに処理を続けることができます。


出力例と動作確認

ExceptionUtil.divide(10, 2); // → 計算結果: 5
ExceptionUtil.divide(10, 0); // → エラー: ゼロによる除算です
ExceptionUtil.divide(-6, 3); // → 計算結果: -2

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

  • Javaでは 0 で割ると ArithmeticException が発生する
  • try-catch を使えば、例外を処理してプログラムを継続できる
  • 例外の原因に応じて、ユーザーに適切なメッセージを出力することが重要

このステップは、**例外処理の第一歩として「catchして止めずに処理する」**という感覚を身につけるためのものです。


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


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

// tesh:
// 実はみんなここで止まる。止まっていい、でも読め。

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

]]>
https://minner.asia/archives/5025/feed 0