/** * ドメイン非依存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:56:55 +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 101 「配列修羅道」 StepFinal 解答例 https://minner.asia/archives/4893 https://minner.asia/archives/4893#respond Sun, 18 May 2025 02:39:44 +0000 http://localhost/?p=4893 ProductUtil.java まとめ

import java.util.ArrayList;

public class ProductUtil {

    public static void printStockList(ArrayList<Product> products) {
        for (Product p : products) {
            System.out.println(p.getName() + " (在庫: " + p.getStock() + ")");
        }
    }

    public static void searchByName(ArrayList<Product> products, String keyword) {
        boolean found = false;
        for (Product p : products) {
            if (p.getName().equals(keyword)) {
                System.out.println(p.getName() + "の在庫数: " + p.getStock());
                found = true;
                break;
            }
        }
        if (!found) {
            System.out.println("該当商品なし");
        }
    }

    public static void printLowStockProducts(ArrayList<Product> products, int threshold) {
        for (Product p : products) {
            if (p.getStock() < threshold) {
                System.out.println(p.getName() + " (在庫: " + p.getStock() + ")");
            }
        }
    }

    public static void updateStockByName(ArrayList<Product> products, String keyword, int newStock) {
        boolean found = false;
        for (Product p : products) {
            if (p.getName().equals(keyword)) {
                p.setStock(newStock);
                System.out.println(p.getName() + "の在庫数を" + newStock + "に更新しました");
                found = true;
                break;
            }
        }
        if (!found) {
            System.out.println("該当商品なし");
        }
    }
}

解説

ここでは、Step01〜09で学んだ内容を組み合わせて1つの完成されたミニアプリに仕上げることを目的としています。
各処理を単体で書けるようになるだけでなく、必要に応じて呼び出して動かせる設計に慣れることが大切です。

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// ちゃんと動いたけど「なんで?」って思ってる人向けの解説、あるよ。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/4893/feed 0
101 「配列修羅道」 Step09 解答例 https://minner.asia/archives/4885 https://minner.asia/archives/4885#respond Sun, 18 May 2025 02:30:35 +0000 http://localhost/?p=4885 Product.java(setStock追加)

public class Product {
    private String name;
    private int stock;

    public Product(String name, int stock) {
        this.name = name;
        this.stock = stock;
    }

    public String getName() {
        return name;
    }

    public int getStock() {
        return stock;
    }

    // 在庫数を更新するsetterメソッドを追加
    public void setStock(int stock) {
        this.stock = stock;
    }
}

ProductUtil.java

import java.util.ArrayList;

public class ProductUtil {
    public static void updateStockByName(ArrayList<Product> products, String keyword, int newStock) {
        boolean found = false;

        for (int i = 0; i < products.size(); i++) {
            Product p = products.get(i);
            if (p.getName().equals(keyword)) {
                p.setStock(newStock);  // 在庫を更新
                System.out.println(p.getName() + "の在庫数を" + newStock + "に更新しました");
                found = true;
                break;
            }
        }

        if (!found) {
            System.out.println("該当商品なし");
        }
    }
}

解説

1. setStock() を使う

  • Javaの慣習として、フィールドは private にし、変更はメソッド経由で行う
  • 直接 p.stock = ... のようには書かない

2. equals() で商品名の一致を確認

  • 文字列比較は == ではなく必ず .equals() を使う

3. 見つかったかどうかを boolean found で記録

  • 検索パターンでは毎回使う基本構造
  • 最後に "該当商品なし" の出力制御に使える

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// 処理の流れ、ちゃんとイメージできてる?自信ないならここ。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/4885/feed 0
101 「配列修羅道」 Step08 解答例 https://minner.asia/archives/4877 https://minner.asia/archives/4877#respond Sun, 18 May 2025 02:22:55 +0000 http://localhost/?p=4877 ProductUtil.java

import java.util.ArrayList;

public class ProductUtil {
    public static void printLowStockProducts(ArrayList<Product> products, int threshold) {
        for (int i = 0; i < products.size(); i++) {
            Product p = products.get(i);

            // 在庫がthreshold未満かどうかをチェック
            if (p.getStock() < threshold) {
                // 該当商品のみ出力
                System.out.println(p.getName() + " (在庫: " + p.getStock() + ")");
            }
        }
    }
}

解説

1. threshold を基準に比較する

  • 比較演算子 < を使い、「未満」のみを抽出する
  • 等しいものは含めたくないときは < を、含めたいときは <= を使う

2. 該当するものだけ出力

  • 条件に合うときだけ System.out.println(...)
  • 条件に合わないものは if 文でスキップされる(else すら不要)

3. 出力フォーマットに注意

  • フォーマットは "商品名 (在庫: 数値)" に固定
  • スペースや括弧のズレで減点されることもあるので、ぴったり合わせる癖をつける

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// 理解がフワッとしてるなら、ここで固めろ。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/4877/feed 0
101 「配列修羅道」 Step07 解答例 https://minner.asia/archives/4868 https://minner.asia/archives/4868#respond Sun, 18 May 2025 02:11:53 +0000 http://localhost/?p=4868 ProductUtil.java

import java.util.ArrayList;

public class ProductUtil {
    public static void searchByName(ArrayList<Product> products, String keyword) {
        boolean found = false;

        for (int i = 0; i < products.size(); i++) {
            Product p = products.get(i);
            if (p.getName().equals(keyword)) {
                System.out.println(p.getName() + "の在庫数: " + p.getStock());
                found = true;
                break;
            }
        }

        if (!found) {
            System.out.println("該当商品なし");
        }
    }
}

解説

① searchByName(ArrayList<Product> products, String keyword) を作る理由

  • ロジックを**再利用可能な形(メソッド)**に切り出すことで、複数のテストケースに使い回せる
  • ユーザー入力(Scanner)を排除し、純粋に検索処理だけをテストできる

② for文で全件を走査

  • products.get(i) で1件ずつ Product を取り出す
  • p.getName().equals(keyword) で名前が一致するかチェック
    • == ではなく .equals() を使う理由:Javaでは文字列は中身で比較する必要があるため

③ 見つかったらすぐに出力して break

  • 同じ名前の商品が複数存在することは今は考慮しない(最初に見つかった1件で十分)

④ 最後まで見つからなければ "該当商品なし" を出力

  • boolean found = false を使って、見つかったかどうかの状態を記録
  • 最後に if (!found) で出力を制御

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// 自信あるなら読まなくていい。モヤモヤしてるなら今すぐクリック。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/4868/feed 0
101 「配列修羅道」 Step06 解答例 https://minner.asia/archives/4859 https://minner.asia/archives/4859#respond Sun, 18 May 2025 01:59:23 +0000 http://localhost/?p=4859
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // ArrayList<Product> 型のリストを作成
        ArrayList<Product> products = new ArrayList<>();

        // new Product(...) で商品を作り、リストに追加
        products.add(new Product("りんご", 10));
        products.add(new Product("みかん", 5));
        products.add(new Product("バナナ", 3));

        // リスト内のすべての商品をループで出力
        for (int i = 0; i < products.size(); i++) {
            // i番目のProductを取得
            Product p = products.get(i);

            // 商品名と在庫数を取得して、指定されたフォーマットで出力
            System.out.println(p.getName() + " (在庫: " + p.getStock() + ")");
        }

        // 出力:
        // りんご (在庫: 10)
        // みかん (在庫: 5)
        // バナナ (在庫: 3)
    }
}

解説

● ArrayList<Product> を使う理由

  • 商品が増える・減るという状況に柔軟に対応するために、固定長の配列ではなく 可変長のリストを使う。

● add() でリストに商品を追加

  • products.add(...) によってリストの末尾に要素が追加されていく。
  • new Product(...) でその場でオブジェクトを作って渡している。

● for 文でリストを走査

  • i = 0 から i < products.size() までループすることで全件を処理できる。
  • products.get(i) で Product を取得 → getName()・getStock() で情報を取り出す。

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// オレも昔ここで詰まった。だから書いた。読め。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/4859/feed 0
101 「配列修羅道」 Step05 解答例 https://minner.asia/archives/4852 https://minner.asia/archives/4852#respond Sun, 18 May 2025 01:45:59 +0000 http://localhost/?p=4852 Product.java

public class Product {
    // 商品名
    private String name;

    // 在庫数
    private int stock;

    // コンストラクタ(初期化)
    public Product(String name, int stock) {
        this.name = name;
        this.stock = stock;
    }

    // 商品名を取得するメソッド
    public String getName() {
        return name;
    }

    // 在庫数を取得するメソッド
    public int getStock() {
        return stock;
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        Product p1 = new Product("りんご", 10);
        Product p2 = new Product("みかん", 5);

        System.out.println(p1.getName() + " (在庫: " + p1.getStock() + ")");
        // 出力: りんご (在庫: 10)

        System.out.println(p2.getName() + " (在庫: " + p2.getStock() + ")");
        // 出力: みかん (在庫: 5)
    }
}

解説

● クラス定義とは?

  • Product は「商品」を表す設計図
  • 設計図には「何を持つか(フィールド)」と「どう振る舞うか(メソッド)」を定義する

● フィールドとコンストラクタ

  • private String name; はデータの隠蔽(カプセル化)
  • this.name = name; は「引数のnameをフィールドに代入する」というJavaの基本形

● メソッドの役割

  • getName() ã‚„ getStock() は、フィールドの値を「外から読めるようにする」ための方法
  • これが 「オブジェクトから値を取り出す」 型の最初のステップ

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// このあたりでつまずくの、めちゃくちゃ多い。解説あるぞ。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/4852/feed 0
101 「配列修羅道」 Step04 解答例 https://minner.asia/archives/4843 https://minner.asia/archives/4843#respond Sun, 18 May 2025 01:32:13 +0000 http://localhost/?p=4843
import java.util.ArrayList;

public class Step04_Tests {
    public static void main(String[] args) {

        // テストケース01
        String[] names1 = {"りんご", "みかん", "バナナ"};
        convertAndPrintList(names1);
        // 出力:
        // りんご
        // みかん
        // バナナ

        // テストケース02
        String[] names2 = {"メロン", "ぶどう"};
        convertAndPrintList(names2);
        // 出力:
        // メロン
        // ぶどう
    }

    // 商品名の配列をArrayListに変換し、出力するメソッド
    public static void convertAndPrintList(String[] names) {
        // 空のArrayListを作成
        ArrayList<String> list = new ArrayList<>();

        // 配列からリストへ要素を追加
        for (int i = 0; i < names.length; i++) {
            list.add(names[i]);
        }

        // リストの要素を1行ずつ出力
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

解説

  • なぜ ArrayList に変換するのか?
    • 配列は要素数が固定だが、ArrayList は要素の追加・削除が自由にできる
    • 実務では ArrayList を使う場面が多いため、配列からの変換を理解することは重要
  • list.add(...) の意味
    • ArrayList に要素を1つずつ追加するメソッド
    • 今回は配列の中身を順に add していく
  • System.out.println(list.get(i))
    • list.get(i) で i番目の要素を取得
    • ArrayList の get() メソッドは、配列の [] に相当する

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// なんでそうなるの?って思ったら、ここを見ろ。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/4843/feed 0
101 「配列修羅道」 Step03 解答例 https://minner.asia/archives/4834 https://minner.asia/archives/4834#respond Sun, 18 May 2025 01:22:14 +0000 http://localhost/?p=4834
public class Step03_Tests {
    public static void main(String[] args) {

        // テストケース01
        String[] names1 = {"りんご", "みかん", "バナナ"};
        int[] stocks1 = {10, 5, 3};
        printStockList(names1, stocks1);
        // 出力:
        // りんご: 10
        // みかん: 5
        // バナナ: 3

        // テストケース02
        String[] names2 = {"メロン", "ぶどう"};
        int[] stocks2 = {0, 8};
        printStockList(names2, stocks2);
        // 出力:
        // メロン: 0
        // ぶどう: 8
    }

    // 商品名と在庫数を対応表示するメソッド
    public static void printStockList(String[] names, int[] stocks) {
        // 同じインデックスを使って、名前と在庫をペアで出力
        for (int i = 0; i < names.length; i++) {
            // i番目の名前と在庫を ":" でつないで出力
            System.out.println(names[i] + ": " + stocks[i]);
        }
    }
}

解説

● メソッド引数を2つにしている理由

  • 商品名と在庫数は別の配列に格納されているため、それぞれ独立した引数として受け取る
  • 両者の要素数が同じであるという前提のもとで、インデックスを合わせて処理する

● for (int i = 0; i < names.length; i++)

  • 名前の配列を基準にループ。stocks.length でも同じだが、必ず一方に揃える
  • i番目の名前と、i番目の在庫を取り出してセットで出力する

● System.out.println(names[i] + ": " + stocks[i]);

  • + を使って文字列と数値を連結し、「名前: 数量」の形に整えて出力
  • フォーマット通りの出力がされているか、常に確認するクセをつけよう

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// モヤったなら、これ読め。スッとするから。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/4834/feed 0
101 「配列修羅道」 Step02 解答例 https://minner.asia/archives/4826 https://minner.asia/archives/4826#respond Sun, 18 May 2025 01:08:20 +0000 http://localhost/?p=4826
public class Step02_Tests {
    public static void main(String[] args) {

        // テストケース01
        int[] stocks1 = {10, 5, 3, 0, 8};
        checkOutOfStock(stocks1);
        // 出力: "在庫切れあり"

        // テストケース02
        int[] stocks2 = {1, 2, 3};
        checkOutOfStock(stocks2);
        // 出力: "在庫切れなし"

        // テストケース03
        int[] stocks3 = {0, 0, 0};
        checkOutOfStock(stocks3);
        // 出力: "在庫切れあり"
    }

    // 在庫切れの有無を判定して出力するメソッド
    public static void checkOutOfStock(int[] stocks) {
        // 配列の各要素を順番にチェックする
        for (int i = 0; i < stocks.length; i++) {
            // 在庫が0なら、即「在庫切れあり」と出力して終了
            if (stocks[i] == 0) {
                System.out.println("在庫切れあり");
                return;  // メソッドをここで終了
            }
        }

        // 最後まで0が見つからなかったら、在庫切れはない
        System.out.println("在庫切れなし");
    }
}

解説

解説在庫が0の商品が1つでもあるかどうかを調べて、出力するメソッドを作る

このステップでは、配列の中に特定の条件(在庫0)を満たす要素が1つでもあるかどうかを調べるという処理をメソッドとして実装します。

これは「検索処理の最初の型」を学ぶ場です。
どこかに該当するものが「あるか/ないか」を判断する処理は、実務でも非常に多く使われます。

ポイント

1.public static void checkOutOfStock(int[] stocks)

  • 配列 stocks を引数として受け取るメソッド。
  • 複数の在庫パターン(テストケース)に対して、同じ処理を何度も使い回せるようになる。

2. for (int i = 0; i < stocks.length; i++)

  • 配列の先頭から最後まで、1つずつ在庫数をチェック。
  • 各要素 stocks[i] に対して、「それが0かどうか」を判定する。

3. if (stocks[i] == 0)

  • 在庫数が0、つまり在庫切れの商品を見つけた瞬間に、「在庫切れあり」と出力する。
  • return; を使って、その場でメソッドを終了する。

4. System.out.println("在庫切れなし");

  • この行は、ループが最後まで終わったあとに実行される。
  • つまり、「在庫0の商品が1つも見つからなかった」=「すべて在庫あり」だった場合だけ、ここにたどり着く。

このメソッドの流れ

  • 配列を順番に見ていく
  • 0 が見つかった時点で「在庫切れあり」を出力 → 終了
  • 最後まで 0 が見つからなかった場合のみ「在庫切れなし」を出力

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// 引っかかった?安心しろ、ここに全部書いてる。

🎯 実習で理解を深めよう

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

]]>
https://minner.asia/archives/4826/feed 0
101 「配列修羅道」 Step01 解答例 https://minner.asia/archives/4814 https://minner.asia/archives/4814#respond Sun, 18 May 2025 00:31:44 +0000 http://localhost/?p=4814
public class Step01_Tests {
    public static void main(String[] args) {

        // テストケース01
        int[] stocks1 = {10, 5, 3, 0, 8};
        printStockSum(stocks1);
        // 出力: "合計在庫数: 26"

        // テストケース02
        int[] stocks2 = {0, 0, 0};
        printStockSum(stocks2);
        // 出力: "合計在庫数: 0"

        // テストケース03
        int[] stocks3 = {100};
        printStockSum(stocks3);
        // 出力: "合計在庫数: 100"
    }

    // 在庫の合計を求めて出力するメソッド
    public static void printStockSum(int[] stocks) {
        // 合計値を格納する変数
        int sum = 0;

        // 配列のすべての要素をループして加算
        for (int i = 0; i < stocks.length; i++) {
            sum += stocks[i];  // i番目の要素をsumに足す
        }

        // フォーマットに従って出力
        System.out.println("合計在庫数: " + sum);
    }
}

解説

配列のすべての在庫数を合計し、出力するメソッドを作る


目的の整理

このステップのゴールは、「商品ごとの在庫数を配列で受け取り、その合計を出力するメソッドを自分で書くこと」です。
Javaの基本である配列のループ処理と合計値の計算を、自分の手でしっかり組み立てられるようになるのが目的です。


プログラムの構成(ざっくり流れ)

  1. 在庫数が格納された int[] stocks を引数として受け取る
  2. for 文で配列の中身を1つずつ取り出す
  3. 合計値を計算していく
  4. 結果を指定されたフォーマットで出力する

ポイント

1.printStockSum(int[] stocks) の形にする理由

  • メソッドの引数に配列を渡すことで、複数の在庫パターン(テストケース)に対応しやすくなる。
  • 同じ処理を何度も使い回す構造(=再利用性のあるコード)に近づく。
  • 引数に配列を取る場合の書き方に慣れよう!

2. int sum = 0;

  • 合計を入れる変数。初期値が 0 であるのは当然。
  • ループの外で宣言するのがポイント(毎回初期化されないように)。

3. for (int i = 0; i < stocks.length; i++)

  • 典型的な「配列を最初から最後までなめる」ループ。
  • 配列の長さが stocks.length。インデックスは 0 から始まる。

4. sum += stocks[i];

  • その時点での在庫数を合計に加える処理。
  • sum = sum + stocks[i]; を省略した形。

5. System.out.println("合計在庫数: " + sum);

  • 出力形式は問題文の指定に完全に従うこと。
  • 文字列と数値の連結は + を使えばOK。

101 ステップアップ問題 「配列修羅道」


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

// tesh:
// 「ここでつまずいたなら絶対読んでくれ、書いてあるから」

🎯 実習で理解を深めよう

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

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