Java java.util パッケージの Random クラス
Random クラスは乱数を生成できるオブジェクトである。double、float、int、long などさまざまなデータ型の値を生成したり、一定の範囲内にある乱数を生成したりできる。また、実行するたびに同じ乱数列が生成されるようにすることもできる。
Random クラスのコンストラクタ
| コンストラクタ | 説明 |
|---|---|
| Random() | デフォルトコンストラクタ。現在時刻を初期値とする乱数生成器オブジェクトを生成する。 |
| Random(long seed) | long 型の seed 値を引数として受け取り、乱数生成器オブジェクトを生成する。 |
Random オブジェクトを生成するときに seed 値を指定することは、開始順序の値を指定することを意味する。seed 値を指定してから乱数を生成すると、毎回同じ乱数が生成される。実行するたびに異なる乱数を得る最もよい方法は、seed 値に現在時刻を使用することである。時刻は常に変化するため、同じ乱数は生成されない。
Random メソッド
| メソッド | 説明 |
|---|---|
| void nextBytes(byte[] bytes) | バッファを乱数で埋める。 |
| boolean nextBoolean() | boolean 型の乱数を返す。 |
| double nextDouble() | double 型の乱数を返す。 |
| float nextFloat() | float 型の乱数を返す。 |
| int nextInt() | int 型の乱数を返す。 |
| long nextLong() | long 型の乱数を返す。 |
| int nextInt(int bound) | 上限値(bound)を受け取り、乱数を返す。 |
| double nextGaussian() | ガウス分布に従う乱数を double 型で返す。 |
| void setSeed(long seed) | 乱数生成器の seed 値を新しく設定する。 |
Random の例
例 1) seed による乱数を求める例である。
package com.devkuma.tutorial.java.util;
import java.util.Random;
public class RandomClass {
public static void main(String[] args) {
Random r1 = new Random();
Random r2 = new Random(System.currentTimeMillis());
Random r3 = new Random(10);
for (int i = 0; i < 10; i++) {
System.out.println("r1: " + r1.nextInt() + ", r2: " + r2.nextInt() + ", r3: " + r3.nextInt());
}
}
}
実行結果は次のとおりである。
r1: 2011236985, r2: -772289311, r3: -1157793070
r1: 1578624710, r2: -604617698, r3: 1913984760
r1: -262276649, r2: 612254308, r3: 1107254586
r1: 1706079238, r2: -1664224378, r3: 1773446580
r1: -583579103, r2: -809586602, r3: 254270492
r1: 1201978631, r2: 1898792462, r3: -1408064384
r1: 1897434446, r2: 1738277915, r3: 1048475594
r1: 1847101385, r2: -1454243203, r3: 1581279777
r1: 44315199, r2: -482107837, r3: -778209333
r1: 1881949787, r2: -221323214, r3: 1532292428
r1 には seed 値を入れておらず、r2 は現在時刻を seed として設定している。r3 は固定値 10 に設定している。プログラムを何度か実行してみると、r1 と r2 は周期的に変わるが、r3 は変わらないことを確認できる。
例 2) 0 から 99 までの乱数を求める例である。
package com.devkuma.tutorial.javautil;
import java.util.Random;
public class RandomClass2 {
public static void main(String[] args) {
Random r = new Random();
for (int i = 0; i < 10; i++) {
System.out.println(r.nextInt(100));
}
}
}
実行結果は次のとおりである。
42
38
33
14
21
41
11
47
96
7
nextInt メソッドに上限値(bound)として 100 を渡して実行すると、0 以上 100 未満の数が乱数として生成されることを確認できる。