/** * ドメイン非依存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:29 +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/5098 https://minner.asia/archives/5098#respond Sun, 25 May 2025 22:53:47 +0000 http://localhost/?p=5098 問題

あなたは、複数のデータを処理するユーティリティメソッドを作成しようとしています。
データには不正なものが混じっている可能性があるため、1件ごとに個別の try-catch で例外処理を行い、ログを残しながら全体を安全に処理する必要があります。

以下の仕様に従って処理を実装してください。


要件

  1. メソッド名は processData(String[] inputs) とする
  2. 各 inputs[i] を Integer.parseInt() で整数に変換し、100 / 値 を計算する
  3. 変換できない文字列(例: "abc")や、ゼロ除算が発生する文字列(例: "0")が含まれる
  4. 1件ごとに try-catch で処理し、例外が発生しても他の要素の処理を継続すること
  5. 以下のように出力すること:
  • 正常時:入力 "20" の結果 → 5
  • 変換失敗:入力 "abc" は数値に変換できませんでした
  • ゼロ除算:入力 "0" はゼロによる除算エラーです

テストコード(Main.java)

public class Main {
  public static void main(String[] args) {
    String[] inputs = {"20", "0", "abc", "10"};
    ExceptionUtil.processData(inputs);
  }
}

ヒント

  • 各要素の処理を for 文でループさせる
  • Integer.parseInt() では NumberFormatException が発生することがある
  • 100 / value の除算では ArithmeticException に注意
  • try-catch ã‚’1件ずつ分けて処理すれば、途中でエラーが起きても最後まで処理が続けられる

→ 解答例

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

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/5098/feed 0
103 「例外修羅道」 Step09 問題 https://minner.asia/archives/5090 https://minner.asia/archives/5090#respond Sun, 25 May 2025 22:48:10 +0000 http://localhost/?p=5090 問題

あなたは、例外が発生したときに、その原因を詳細に調査できるようにログ出力する処理を作成しようとしています。

次の仕様に従って、例外が発生した際に、以下の情報を出力してください:

  1. "エラーが発生しました"(固定メッセージ)
  2. e.getMessage() による例外メッセージ
  3. e.printStackTrace() によるスタックトレース(開発者向けログ)

要件

  • メソッド名は traceError(int[] array, int index, int divisor) とする
  • 配列の要素を取り出し、それを指定された数値で割る
  • インデックスが範囲外、またはゼロ除算が起こりうる
  • 例外が発生した場合、以下の3つを出力すること:
    • "エラーが発生しました"
    • 例外のメッセージ(e.getMessage())
    • 例外のスタックトレース(e.printStackTrace())

テストコード(Main.java)

public class Main {
  public static void main(String[] args) {
    int[] data = {10, 20, 30};
    ExceptionUtil.traceError(data, 1, 5);   // 正常
    ExceptionUtil.traceError(data, 5, 2);   // インデックス範囲外
    ExceptionUtil.traceError(data, 0, 0);   // ゼロ除算
  }
}

ヒント

  • e.getMessage() は例外の簡潔な説明文(1行)を取得する
  • e.printStackTrace() は例外の発生箇所を詳細に出力する(開発用)
  • 本番環境では printStackTrace() の代わりにロガー出力が使われることが多い

→ 解答例

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

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/5090/feed 0
103 「例外修羅道」 Step08 問題 https://minner.asia/archives/5082 https://minner.asia/archives/5082#respond Sun, 25 May 2025 22:42:55 +0000 http://localhost/?p=5082 問題

あなたは、特定の業務エラーを表すために、独自の例外クラスを作成しようとしています。
次の要件に従って、自作の例外を定義し、それを実際の処理で使ってください。


要件

  1. MyAppException という名前のクラスを定義し、Exception を継承すること
  2. MyAppException はコンストラクタでエラーメッセージを受け取り、super() で親クラスに渡すこと
  3. checkCode(int code) メソッドを作成し、code が 999 の場合に MyAppException を throw すること
  4. 呼び出し元の main メソッドで try-catch を使い、例外を処理して "独自例外発生: (例外メッセージ)" と出力すること
  5. code が 999 でない場合は "コード: (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());
    }
  }
}

ヒント

  • 独自例外は public class MyAppException extends Exception として定義する
  • super("メッセージ") を使えば、Exception クラスにメッセージを渡せる
  • 業務ロジックに応じた意味のある例外クラスを作ると、プログラムが読みやすくなる

→ 解答例

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

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/5082/feed 0
103 「例外修羅道」 Step07 問題 https://minner.asia/archives/5073 https://minner.asia/archives/5073#respond Sun, 25 May 2025 22:37:44 +0000 http://localhost/?p=5073 問題

あなたは、ユーザーの年齢を受け取って処理するメソッドを作成しようとしています。
年齢が0未満の値だった場合は、不正な入力として例外を発生させてください。

次の要件に従って実装してください:

  • メソッド checkAge(int age) を作成する
  • age が 0 未満なら、IllegalArgumentException ã‚’ throw して発生させる
  • 呼び出し元で try-catch により例外を処理し、例外が発生したら "エラー: (例外メッセージ)" を出力する
  • 正常な年齢なら "å¹´é½¢: (å¹´é½¢)" を出力する

要件

  • throw new IllegalArgumentException(...) を使って例外を自ら発生させること
  • IllegalArgumentException のコンストラクタに、エラーメッセージを渡すこと
  • 呼び出し側で try-catch により例外を処理すること

テストコード(Main.java)

public class Main {
  public static void main(String[] args) {
    try {
      ExceptionUtil.checkAge(25);   // 正常
      ExceptionUtil.checkAge(-5);   // エラー
    } catch (IllegalArgumentException e) {
      System.out.println("エラー: " + e.getMessage());
    }
  }
}

ヒント

  • throw はメソッドの中で例外を発生させるときに使う
  • IllegalArgumentException は「引数がおかしい」ことを表す標準的な例外クラス
  • 条件分岐で age < 0 のときだけ例外を投げるようにする

→ 解答例

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

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/5073/feed 0
103 「例外修羅道」 Step06 問題 https://minner.asia/archives/5064 https://minner.asia/archives/5064#respond Sun, 25 May 2025 22:31:28 +0000 http://localhost/?p=5064 問題

あなたは、ファイルや外部リソースを扱うような処理を想定したメソッドを作成しようとしています。
この処理では例外が発生する可能性があるため、メソッド内で try-catch を使わず、例外を呼び出し元に投げる(throws)形式で設計してください。

次の仕様に従って実装してください:

  • メソッド riskyMethod() は強制的に例外を発生させる(throw new Exception("危険な処理です");)
  • 呼び出し元の main メソッドで try-catch を使って、例外を受け取り処理する
  • 例外が発生したら "エラーを受け取りました: (例外メッセージ)" を出力する

要件

  • riskyMethod メソッドは throws Exception を宣言すること
  • 呼び出し元で try-catch により例外を処理すること
  • System.out.println で例外メッセージを出力すること
  • throw と throws の違いを意識すること

テストコード(Main.java)

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

ヒント

  • throw → 例外を発生させる
  • throws → 「このメソッドは例外を投げるかもしれません」と宣言する
  • Exception という親クラスで宣言すれば、あらゆる例外をカバーできる

→ 解答例

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

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/5064/feed 0
103 「例外修羅道」 Step05 問題 https://minner.asia/archives/5055 https://minner.asia/archives/5055#respond Sun, 25 May 2025 22:26:39 +0000 http://localhost/?p=5055 問題

あなたは、何らかの計算処理を行うメソッドを作成しようとしています。
この処理では、エラーが発生する可能性がありますが、どんな場合でも必ず実行したい処理(終了メッセージの出力)があります。

以下のような動作になるように、try-catch-finally を使って実装してください:

  • 正常に処理が行われたとき: 計算結果: 4 終了処理を実行しました
  • エラーが発生したとき(ゼロ除算): エラー: ゼロによる除算です 終了処理を実行しました

このように、エラーの有無に関係なく、”終了処理を実行しました” を必ず出力してください。


要件

  • try-catch-finally を使って処理を実装すること
  • ArithmeticException を適切に捕捉すること
  • finally ブロック内で終了メッセージを出力すること
  • System.out.println を使うこと

テストコード(Main.java)

public class Main {
  public static void main(String[] args) {
    ExceptionUtil.computeAndCleanup(20, 5);   // 正常
    ExceptionUtil.computeAndCleanup(10, 0);   // ゼロ除算
  }
}

ヒント

  • finally ブロックは、例外が発生してもしなくても、最後に必ず実行される
  • リソースの解放やログの出力などに使われることが多い

→ 解答例

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

🎯 実習で理解を深めよう

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

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

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

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

        } catch (Exception e) {
            // すべての例外をまとめて捕捉
            System.out.println("例外が発生しました: " + e.getMessage());
        }
    }
}

解説:Exception でまとめて catch する

このステップでは、ArrayIndexOutOfBoundsException や ArithmeticException のような
複数種類の例外を、親クラスである Exception でまとめて捕捉する方法を学びます。


Exception は例外クラスの親

Javaの例外階層では、ほとんどの例外は Exception クラスを継承しています。

Exception
├── RuntimeException
│ ├── ArithmeticException
│ └── ArrayIndexOutOfBoundsException
└── IOException など

このため、catch (Exception e) と書けば、ほとんどの例外を一括で処理できます。


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

safeProcess(new int[]{10, 20, 30}, 1, 5);
// → 選ばれた値: 20
// → 計算結果: 4

safeProcess(new int[]{10, 20, 30}, 3, 2);
// → 例外が発生しました: Index 3 out of bounds for length 3

safeProcess(new int[]{10, 20, 30}, 0, 0);
// → 選ばれた値: 10
// → 例外が発生しました: / by zero

getMessage() で原因を知る

例外オブジェクトの getMessage() を使うと、何が起きたのかのメッセージを取得できます。
これはログ出力やユーザーへの通知に役立ちます。


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

  • Exception でcatchすれば、個別の例外をすべて一括で処理できる
  • 一括catchは便利だが、個別の対処ができないというデメリットもある
  • getMessage() を使えば、例外の内容を簡単に取得できる

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


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

// tesh:
// この違和感、ここで処理しないと残るよ。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/5051/feed 0
103 「例外修羅道」 Step04 問題 https://minner.asia/archives/5046 https://minner.asia/archives/5046#respond Sun, 25 May 2025 22:21:08 +0000 http://localhost/?p=5046 問題

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

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

この2つの例外は、どちらも RuntimeException → Exception を継承しています。
このステップでは、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 ステップアップ問題 「例外修羅道」

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/5046/feed 0
103 「例外修羅道」 Step03 問題 https://minner.asia/archives/5035 https://minner.asia/archives/5035#respond Sun, 25 May 2025 22:13:26 +0000 http://localhost/?p=5035 問題

あなたは、2つの操作を行うメソッドを作成しようとしています:

  1. 配列から指定インデックスの要素を取り出す
  2. 指定した数値で割り算を行う

それぞれに以下のような例外が発生する可能性があります:

  • 配列インデックスが範囲外 → ArrayIndexOutOfBoundsException
  • 割り算の除数が0 → ArithmeticException

この2つの処理を 1つのメソッド内で順番に実行し、例外を try-catch で適切に処理してください。
それぞれのエラーに対して、異なるメッセージを出力してください。


要件

  • ArrayIndexOutOfBoundsException と ArithmeticException ã‚’ 個別に catch すること
  • それぞれの例外で 別のエラーメッセージ を出力すること
  • 正常な場合には、配列の値と計算結果を表示すること

出力形式

  • 正常時: 選ばれた値: 30 計算結果: 3
  • インデックスが範囲外のとき: エラー: インデックスが範囲外です
  • ゼロ除算が発生したとき: エラー: ゼロによる除算です

テストコード(Main.java)

public class Main {
  public static void main(String[] args) {
    int[] numbers = {10, 20, 30};
    ExceptionUtil.process(numbers, 2, 10);  // 正常
    ExceptionUtil.process(numbers, 5, 2);   // インデックス範囲外
    ExceptionUtil.process(numbers, 1, 0);   // ゼロ除算
  }
}

ヒント

  • catch ã‚’2つ書くと、それぞれの例外に応じた処理ができる
  • catch (Exception e) でまとめて捕まえることもできるが、このステップでは使わない

→ 解答例

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

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/5035/feed 0
103 「例外修羅道」 Step02 問題 https://minner.asia/archives/5028 https://minner.asia/archives/5028#respond Sun, 25 May 2025 22:02:49 +0000 http://localhost/?p=5028 問題

あなたは、整数の配列を受け取り、その中から指定されたインデックスの要素を取り出して出力するメソッドを作成しようとしています。
ただし、指定されたインデックスが配列の範囲外だった場合、ArrayIndexOutOfBoundsException が発生します。

この例外を適切に try-catch で処理し、次のように出力してください:

  • 正常に要素を取得できたとき:選ばれた値: (値)
  • 範囲外のインデックスが指定されたとき:エラー: インデックスが範囲外です

要件

  • ArrayIndexOutOfBoundsException ã‚’ try-catch 文で処理すること
  • System.out.println を使ってメッセージを出力すること
  • 配列の長さが不定でも動作するようにすること(要素数3で固定でも可)

テストコード(Main.java)

public class Main {
  public static void main(String[] args) {
    int[] numbers = {10, 20, 30};
    ExceptionUtil.printElement(numbers, 1);  // 範囲内
    ExceptionUtil.printElement(numbers, 3);  // 範囲外
    ExceptionUtil.printElement(numbers, 0);  // 範囲内
  }
}

ヒント

  • 配列[index] アクセスで例外が起こる可能性がある
  • try ブロックの中で要素を取り出す
  • 範囲外アクセスが起きた場合は catch (ArrayIndexOutOfBoundsException e) で対応する

→ 解答例

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

🎯 実習で理解を深めよう

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

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