- Math.random()とは何か
- まずは乱数を理解しよう
- Math.random()の基本構文
- ステップバイステップで理解する
- 返される値の範囲を理解しよう
- なぜそのままでは使いにくいのか
- 0~9の乱数を生成する
- 1~10の乱数を生成する
- ステップで考える乱数範囲の作り方
- 実務でよくある利用例① 抽選システム
- 実務でよくある利用例② テストデータ生成
- 実務でよくある利用例③ サイコロ
- 実務でよくある利用例④ ランダムメッセージ表示
- 特に重要:intへのキャストを理解しよう
- 実務ではRandomクラスの方が使われることも多い
- 情報セキュリティの観点から見る重要な注意点
- 実務で使えるテンプレート集
- 初心者が覚えておくべき重要ポイント
- まとめ
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);
Java20~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();
Java0~9テンプレート
// 0~9
int number =
(int)(
Math.random()
* 10
);
Java1~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開発力につながります。
