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 未満の数が乱数として生成されることを確認できる。