Java Tips | 基本ユーティリティ:Math.random()

Web APP Java
スポンサーリンク
スポンサーリンク

Math.random()とは何か

Javaで業務システムを開発していると、「ランダムな値」を生成したい場面があります。

例えば、

  • 抽選システム
  • テストデータ生成
  • サンプルデータ作成
  • ゲーム開発
  • ランダム表示機能
  • 負荷テスト用データ生成

などです。

そのような場面で利用されるのが Math.random() です。

Math.random()
Java

このメソッドは0以上1未満のランダムな小数値(double型)を返します。

Javaで最も簡単に乱数を生成できる基本ユーティリティです。

まずは乱数を理解しよう

乱数とは、毎回異なる値が生成される数値のことです。

例えばMath.random()を実行すると、


0.234567

0.829145

0.105872

0.678912

のような値が返されます。

実行するたびに結果が変わります。

これが乱数です。

Math.random()の基本構文

最もシンプルな例を見てみましょう。

// 乱数生成
double result =
        Math.random();

// 結果表示
System.out.println(result);
Java

実行結果の例


0.5432781941283

実行するたびに異なる値になります。

ステップバイステップで理解する

ステップ1:Math.random()を呼び出す

// 乱数生成
double value =
        Math.random();
Java

ステップ2:結果を確認する

// 出力
System.out.println(value);
Java

ステップ3:再実行する

// 再度生成
System.out.println(
        Math.random()
);
Java

結果例


0.213456
0.873214

毎回違う値が返ります。

返される値の範囲を理解しよう

非常に重要なポイントです。

Math.random()は、


0.0以上

1.0未満

の値を返します。

つまり、


0.0 以上

0.999999999...
以下

です。

1.0は返りません。

なぜそのままでは使いにくいのか

実務では、


0.2345678

のような値を直接利用するケースはあまり多くありません。

多くの場合、

  • 1~10
  • 1~100
  • 0~5
  • 社員番号候補

などの範囲で利用したいことが多いです。

そこで計算を組み合わせます。

0~9の乱数を生成する

// 0~9
int number =
        (int)(
                Math.random()
                * 10
        );

System.out.println(number);
Java

結果例


0
7
3
9

10は出ません。

1~10の乱数を生成する

実務ではこちらの方がよく利用されます。

// 1~10
int number =
        (int)(
                Math.random()
                * 10
        ) + 1;

System.out.println(number);
Java

結果例


1
5
10
3

1~10の整数が生成されます。

ステップで考える乱数範囲の作り方

初心者が覚えておくべき公式があります。


(int)(Math.random() * 件数)
Java

例えば、

// 0~99
(int)(Math.random() * 100)
Java

になります。

さらに開始値を加算します。

// 1~100
(int)(Math.random() * 100)
+ 1
Java

実務でよくある利用例① 抽選システム

// 当選番号
int winner =
        (int)(
                Math.random()
                * 100
        ) + 1;

System.out.println(winner);
Java

抽選機能の基本です。

実務でよくある利用例② テストデータ生成

// ランダム年齢
int age =
        (int)(
                Math.random()
                * 60
        ) + 20;

System.out.println(age);
Java

20~79歳のサンプルデータが生成されます。

実務でよくある利用例③ サイコロ

// サイコロ
int dice =
        (int)(
                Math.random()
                * 6
        ) + 1;

System.out.println(dice);
Java

結果例


4

ゲーム開発の定番例です。

実務でよくある利用例④ ランダムメッセージ表示

// メッセージ一覧
String[] messages = {
        "こんにちは",
        "お疲れ様です",
        "ありがとうございます"
};

// ランダム選択
int index =
        (int)(
                Math.random()
                * messages.length
        );

// 表示
System.out.println(
        messages[index]
);
Java

ランダム表示機能で使われます。

特に重要:intへのキャストを理解しよう

初心者が最も混乱しやすいポイントです。


Math.random() * 10
Java

の結果は、


3.5486
7.1284
9.9999

のような小数になります。

そこで、


(int)
Java

を利用すると小数部分が切り捨てられます。


3.5486 → 3

7.1284 → 7

9.9999 → 9

この仕組みで整数乱数を作っています。

実務ではRandomクラスの方が使われることも多い

Javaには専用の乱数クラスがあります。


Random random =
        new Random();

int number =
        random.nextInt(10);
Java

より複雑な乱数処理ではこちらが利用されることもあります。

ただし初心者が乱数の基本を学ぶならMath.random()が最適です。

情報セキュリティの観点から見る重要な注意点

非常に重要です。

Math.random()は便利ですが、 セキュリティ用途には使用してはいけません。

例えば、

  • パスワード生成
  • 認証コード生成
  • ワンタイムパスワード
  • トークン生成
  • APIキー生成

などです。

Math.random()は暗号学的に安全な乱数ではありません。

セキュリティ用途では SecureRandom を利用します。


// セキュアな乱数
SecureRandom random =
        new SecureRandom();

int code =
        random.nextInt(
                1000000
        );
Java

これは情報セキュリティの観点から必ず覚えておきたい重要事項です。

実務で使えるテンプレート集

基本乱数テンプレート


// 0以上1未満
double value =
        Math.random();
Java

0~9テンプレート


// 0~9
int number =
        (int)(
                Math.random()
                * 10
        );
Java

1~100テンプレート


// 1~100
int number =
        (int)(
                Math.random()
                * 100
        ) + 1;
Java

配列ランダム選択テンプレート


// ランダムインデックス
int index =
        (int)(
                Math.random()
                * array.length
        );
Java

初心者が覚えておくべき重要ポイント

  • 0以上1未満の乱数を生成する
  • 戻り値はdouble型である
  • 毎回結果が変わる
  • 整数乱数は掛け算とキャストで作る
  • 抽選やテストデータ生成で活躍する
  • Randomクラスとの違いを理解する
  • セキュリティ用途では使わない

まとめ

Math.random()は、Javaで最も簡単に乱数を生成できる標準メソッドです。

  • 0以上1未満の乱数を返す
  • 戻り値はdouble型である
  • 整数乱数の生成に応用できる
  • 抽選やダミーデータ作成で活躍する
  • Randomクラスと組み合わせて学ぶと理解が深まる
  • セキュリティ用途には利用してはいけない
  • Java開発者が必ず覚えておきたい基本ユーティリティである

特に業務システムでは、テストデータ作成やサンプルデータ生成、ランキング表示、ランダム抽選などで乱数が必要になることがあります。Math.random()を正しく理解することで、乱数処理の基礎を身につけることができます。また、セキュリティ用途ではSecureRandomを利用すべき理由も合わせて理解しておくと、実務レベルのJava開発力につながります。

タイトルとURLをコピーしました