Java入門 STEP20|Javaの基礎を使ってプログラムを作ろう

karin@taishi@felmia

ここまで学んだことを使ってみよう

STEP19まで、Javaの基本的な書き方を1つずつ学んできました。

変数から始まり、条件分岐やループ、メソッド、クラス、継承、List、Map、例外処理など、最初のころと比べると使えるものもかなり増えています。

ただ、実際にプログラムを作るときは、

「今回はfor文を使うプログラムを作ろう」

「今日はListだけを使おう」

というようには考えません。

作りたいものに合わせて、これまで学んだ仕組みを組み合わせていきます。

今回は簡単な商品管理プログラムを作りながら、それを体験してみましょう。

今回作るもの

商品について、

  • 商品ID
  • 商品名
  • 価格

を登録します。

複数の商品をListで管理して、登録されている商品の表示や、商品IDを使った検索ができるプログラムを作ります。

ルミィ
ルミィ

今まで覚えたものを組み合わせて、ちゃんと1つのプログラムにするんだね♪

まずは必要なものを考えよう

いきなりコードを書き始める前に、どんなものが必要なのか考えてみます。

今回は商品を扱うので、まず商品を表すクラスが必要です。

商品が持つ情報は、

商品ID
商品名
価格

の3つにします。

そして、複数の商品を管理するためにListを使います。

大まかには、

商品を作る
 ↓
Listに商品を追加する
 ↓
登録されている商品を表示する
 ↓
商品IDを指定して検索する

という流れです。

プログラムを書く前にこのくらいの流れを考えておくだけでも、「何から作ればいいのか分からない」状態になりにくくなります。

Productクラスを作ろう

まずは、商品を表すProductクラスを作ります。

public class Product {

    private int id;
    private String name;
    private int price;

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

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }
}

ここには、新しい文法はありません。

以前学んだカプセル化とコンストラクタを使っています。

フィールドはprivateにして、値を取得するためのgetterを用意しています。

そして、

public Product(int id, String name, int price)

というコンストラクタを使って、商品を作るときに必要な情報を受け取れるようにしています。

例えば、

Product product = new Product(1, "ノートPC", 120000);

とすれば、

商品ID:1
商品名:ノートPC
価格:120000

という情報を持つ商品を作れます。

ルミィ
ルミィ

新しいことをしてるように見えるけど、クラスやコンストラクタは前にやったことだね!

商品をListで管理しよう

商品を1つだけではなく、複数登録できるようにします。

STEP17で学んだListとArrayListを使いましょう。

実行用クラスは、他のサンプルと重なりにくいようにProductManagementSampleとします。

import java.util.ArrayList;
import java.util.List;

public class ProductManagementSample {

    public static void main(String[] args) {

        List<Product> products = new ArrayList<>();

        products.add(new Product(1, "ノートPC", 120000));
        products.add(new Product(2, "マウス", 3000));
        products.add(new Product(3, "キーボード", 8000));
    }
}

STEP17では、

List<String>

を使いました。

今回は、

List<Product>

になっています。

ListにはStringやIntegerだけでなく、自分で作ったクラスのオブジェクトも入れることができます。

Listにはオブジェクトも入れられる

List<Product> products = new ArrayList<>();

とすると、Product型のオブジェクトを複数管理できます。

実際のプログラムでも、複数のオブジェクトをListで扱うことはよくあります。

登録した商品を表示しよう

商品を登録できたので、次はすべての商品を表示してみます。

先ほどのProductManagementSampleに処理を追加します。

import java.util.ArrayList;
import java.util.List;

public class ProductManagementSample {

    public static void main(String[] args) {

        List<Product> products = new ArrayList<>();

        products.add(new Product(1, "ノートPC", 120000));
        products.add(new Product(2, "マウス", 3000));
        products.add(new Product(3, "キーボード", 8000));

        for (Product product : products) {
            System.out.println(
                "商品ID:" + product.getId()
                + " 商品名:" + product.getName()
                + " 価格:" + product.getPrice() + "円"
            );
        }
    }
}

実行結果

商品ID:1 商品名:ノートPC 価格:120000円
商品ID:2 商品名:マウス 価格:3000円
商品ID:3 商品名:キーボード 価格:8000円

ここでは拡張forを使って、productsからProductを1つずつ取り出しています。

そして、

product.getName()

のようにgetterを使って商品の情報を取得しています。

List・ループ・クラス・カプセル化が、ここで一緒に使われています。

商品を検索できるようにしよう

次は、商品IDを使って商品を検索します。

例えば、

商品ID:2

を探して、見つかったら商品の情報を表示するようにします。

まずは検索処理をメソッドとして作ってみましょう。

public static Product findProduct(
        List<Product> products, int searchId) {

    for (Product product : products) {

        if (product.getId() == searchId) {
            return product;
        }
    }

    return null;
}

少し長くなりましたが、やっていることを順番に見れば難しくありません。

まず、

for (Product product : products)

で商品を1つずつ取り出します。

そして、

if (product.getId() == searchId)

で、商品のIDと探しているIDが同じか確認しています。

同じ商品が見つかったら、

return product;

でその商品を返します。

最後まで見つからなかった場合は、

return null;

としています。

nullは、ここでは「該当する商品がない」ことを表しています。

検索結果を確認しよう

では、検索処理も含めて動かしてみます。

import java.util.ArrayList;
import java.util.List;

public class ProductSearchSample {

    public static void main(String[] args) {

        List<Product> products = new ArrayList<>();

        products.add(new Product(1, "ノートPC", 120000));
        products.add(new Product(2, "マウス", 3000));
        products.add(new Product(3, "キーボード", 8000));

        int searchId = 2;

        Product foundProduct = findProduct(products, searchId);

        if (foundProduct != null) {
            System.out.println("商品が見つかりました");
            System.out.println("商品名:" + foundProduct.getName());
            System.out.println("価格:" + foundProduct.getPrice() + "円");
        } else {
            System.out.println("商品が見つかりませんでした");
        }
    }

    public static Product findProduct(
            List<Product> products, int searchId) {

        for (Product product : products) {

            if (product.getId() == searchId) {
                return product;
            }
        }

        return null;
    }
}

実行結果

商品が見つかりました
商品名:マウス
価格:3000円

今回検索したIDは2です。

そのため、IDが2の「マウス」が見つかっています。

もし、

int searchId = 10;

に変更すると、IDが10の商品は登録されていないため、

商品が見つかりませんでした

と表示されます。

ルミィ
ルミィ

Listから取り出して、ifで調べて、メソッドから結果を返してる!
今まで別々に覚えたものが一緒に動いてるね♪

どの知識を使っている?

ここで一度、今回のプログラムを振り返ってみましょう。

Productでは、

クラス・フィールド・コンストラクタ・カプセル化

を使いました。

複数の商品を管理するために、

List・ArrayList

を使っています。

すべての商品を確認したり検索したりするときには、

ループ

を使っています。

商品IDが一致するか、検索結果が見つかったかを判断するために、

条件分岐

を使っています。

検索処理を分けるためには、

メソッド

を使いました。

今回、新しい文法をたくさん覚えたわけではありません。

これまで覚えたものを組み合わせただけです。

プログラムは知識を組み合わせて作る

Javaを学習するときは、文法を1つずつ覚えていきます。

実際にプログラムを作るときは、その中から必要なものを選んで組み合わせます。

「何の文法を使うか」から考えるのではなく、「何をしたいのか」を考えて、そのために必要なものを選ぶことが大切です。

少し改造してみよう

ここまで動かせたら、コードをそのまま終わりにせず、少し変更してみるのもおすすめです。

例えば、

商品を1つ追加する

検索する商品IDを変更する

価格が5000円以上の商品だけ表示する

といった変更なら、これまで学んだ範囲でできます。

余裕があれば、

商品名を指定して検索できるようにする

という変更にも挑戦してみてください。

最初から大きなプログラムを作ろうとする必要はありません。

動いているコードを少し変えて、

ここを変えたらどうなる?

と試してみることも、Javaに慣れるための良い練習になります。

ルミィ
ルミィ

まず動かして、それからちょっとずつ改造!
自分で変えたところが思った通り動くとうれしいよね♪

今回はJava入門編の最後のSTEPです。

まずは答えを調べたり生成AIにコードを書いてもらったりする前に、ここまで学んだ内容を思い出しながら、自分で考えて変更してみましょう。

分からなくなった場合も、すぐに答えを見るのではなく、

「どのSTEPで学んだ内容が使えそうか」

「どこまでは自分で分かっているか」

を一度整理してみることが大切です。

それでも分からない場合は、これまでの記事に戻って確認してみましょう。

自分で考えて試した経験は、これから新しい技術を学ぶときにも役立ちます。

よくある間違い

Product.javaを作らずに実行する

今回のプログラムではProductクラスを使用しています。

そのため、実行用クラスだけではなく、最初に作った、

Product.java

も必要です。

同じプロジェクト内に用意してから実行しましょう。

Listに入れる型を間違える

今回はProductを管理するため、

List<Product> products = new ArrayList<>();

としています。

List<String>ではありません。

何をListに入れたいのかを確認して型を指定しましょう。

nullの確認をせずに使ってしまう

商品が見つからなかった場合、findProduct()はnullを返します。

そのため、

if (foundProduct != null)

で確認してから商品の情報を取得しています。

見つからなかった場合の処理も忘れないようにしましょう。

STEP20のまとめ

STEP20のポイント

  • 実際のプログラムでは、複数のJavaの知識を組み合わせて使う
  • クラスを使って、扱いたいデータをまとめられる
  • Listを使って、複数のオブジェクトを管理できる
  • ループを使って、複数のデータを順番に処理できる
  • 条件分岐を使って、必要なデータを判断できる
  • メソッドを使って、処理を役割ごとに分けられる
  • まず何を作りたいのか考えてから、必要な仕組みを選ぶ

ここまで学んだ内容をすべて暗記している必要はありません。

忘れた書き方があれば、そのときに前のSTEPへ戻って確認すれば大丈夫です。

大切なのは、「こういうことができたはず」と思い出して、必要な情報を調べながらコードを書けることです。

ルミィ
ルミィ

最初は1行ずつだったJavaが、ちゃんと1つのプログラムになったね♪
ここまでおつかれさま!

Java入門編クリア!

STEP1からSTEP20まで、Javaの基本を順番に学んできました。

最初は見慣れなかったコードも、ここまで進めてきたことで、少しずつ「これはクラス」「ここはメソッド」「この処理ならListが使えそう」と読み取れるようになっているはずです。

もちろん、Javaの学習はこれで終わりではありません。

実際にコードを書いていると、まだ知らないクラスやメソッド、書き方にもたくさん出会います。

そんなときも、全部覚えてから先へ進もうとする必要はありません。

分からないものが出てきたら調べる。
コードを書いて試してみる。
うまく動かなければ原因を確認する。

その繰り返しで、できることを少しずつ増やしていきましょう。

次の学習へ

Javaの基本が分かってきたら、次はSQLを学んでいきます。

実際のシステムでは、Javaだけで処理が完結するのではなく、データベースに保存されている情報を取得したり、新しいデータを登録したりすることがよくあります。

そのデータベースを操作するために使われるのがSQLです。

Javaとは書き方が大きく違いますが、

「データを登録する」

「必要なデータを探す」

「データを変更する」

といった、実際のシステム開発につながる操作を学んでいきます。

次はSQL入門へ進みましょう。

Java入門 STEP1~20、おつかれさまでした!

→ Java入門|初心者が基礎から学べるJava学習ガイド

記事URLをコピーしました