【Java】金運を占うプログラムでクラスとインスタンスを学ぶ【Randomメソッド】

【アイキャッチ】クラスとインスタンス

今回は1つのプログラムを複数のクラスに分けることで、クラスの作り方と使い方を理解していきます。

クラスとインスタンスは、勉強始めたての人が必ずと言っていいほどつまづきがちな項目です。

実際のプログラムとともに説明していくので、ゆっくり理解していきましょう。

クラスとは?

クラスとはデータ構造をつくる仕組みのことを言います。自らクラスを作成することで、必要に応じたデータ型を新規につくることができるのです。

インスタンスとは?

インスタンスは「実体」という意味を持ち、クラスをもとに作られたモノのことです。

金運を占うプログラムを作成する

インスタンス化しないプログラム

まずはひとつのクラスのなかにすべてのコードを収めたプログラムをみていきましょう。

public class Money {
  public static void main(String[] args) {
    // [1] randomメソッドの戻り値を格納
    double a = Math.random();
    // [2] 10倍したaをbに格納
    int b = (int) (a * 10); ・・・②
    // [3] 金運を出力する
    System.out.println("君の今日の金運は・・・");
    // [4] 繰り返し処理
    for (int i = 0; i < b;  i++) {・・・③
      System.out.print("☆");
    }
    // [5] 少なくともひとつは☆を出力する
    System.out.println("☆");
  }
}
要点
[1] double型の変数aにrandomメソッド(Mathクラス)の戻り値を格納している
[2] 変数aを10倍し、int型で整数にした値を変数bに格納する
[3] 金運を出力するためのSystem.out.println
[4] bの数値に応じて、繰り返し処理を行う
[5] 少なくともひとつは☆を出力する

 

randomメソッドは、0.0~1.0未満の範囲でdouble型の乱数を取得します。しかし小数のままでは使い勝手が悪いので、[2]でdouble型の変数aを10倍し、int型に変換することで0~10未満の整数を取得できるようにしています。

あとは繰り返しを利用して、ランダムで☆が出力されるようにプログラムしています。

これでもプログラムとして機能しますが、決してオブジェクト指向らしいプログラムとは言えません。せっかくなのでクラスを2つに分け、インスタンスを生成してみましょう。

【アイキャッチ】カプセル化

【Java】年齢を設定・表示するプログラムからカプセル化を学ぶ【不用意なアクセスを防ぐ】

2021年1月23日

クラスとインスタンスを使うプログラム

上記のプログラムを、つぎはインスタンスを使って作成していきます。

金運を出力するための「Money01」クラスと、それをインスタンス化して利用する「Money02」クラスを記述します。

class Money01 {
  int b;
  // [5] resultメソッドで金運を出力する
  void result() {
    System.out.println("君の今日の金運は・・・");
    // [6] 繰り返し処理
    for (int i = 0; i < b;  i++) {・・・③
      System.out.print("☆");
    }
    // [7] 少なくともひとつは☆を出力する
    System.out.println("☆");
  }
}
public class Money02 {
  public static void main(String[] args) {
    // [1] randomメソッドの戻り値を格納
    double a = Math.random();
    // [2] インスタンスを生成
    Money01 money = new Money01();
    // [3] 10倍したaをmoney.bに格納
    money.b = (int)(a * 10);
    // resultメソッドを呼び出し
    money.result();
  }
}
要点
[1] double型の変数aにrandomメソッド(Mathクラス)の戻り値を格納している
[2] Money01クラスのインスタンスを生成
[3] 10倍したaをmoney.bに格納
[4] moneyインスタンスのresultメソッドを呼び出し
[5] resultメソッドで金運を出力する
[6] bの数値に応じて、繰り返し処理を行う
[7] 少なくともひとつは☆を出力する

 

このようにクラスを複数に分けても、インスタンス化しないプログラムと同じように動作します。

インスタンス化することで、Money01クラスのメソッドや変数をすべて使えるようになるだけでなく、機能ごとにクラスを分けることができるので利便性や保守性が高まります。いわゆるオブジェクト指向のことですね。

ひとつのクラスやメソッドに大量に記述してしまうと、自分で見返したときに分かりづらくなりますし、他のエンジニアが理解するのもかなり大変になります。できるだけクラスやメソッドは機能ごとにまとめるように心がけましょう。

クラスとインスタンスはオブジェクト指向の基本

オブジェクト

今回はクラスとインスタンスを理解するために金運を占うプログラムを作成しました。

クラスとインスタンス、初心者にとってはかなり理解しにくいものではないかと思います。しかし一般的なプログラミング言語の基本となっているオブジェクト指向の基礎なので、しっかり理解できるようにしましょう。

オブジェクト指向と関係の深い知識となるので、まずはざっくりオブジェクト指向について学んでみるのもいいですね。

【アイキャッチ】足し算プログラム

【Java】変数を使って足し算の結果を表示するプログラム【変数あり・なしで比較】

2021年1月11日

コメントを残す

メールアドレスが公開されることはありません。