ジャバのランダム
JavaのRandomクラスは、ランダムな数のシリーズを生成するために使用されます。
JavaのRandomクラス
- Random class is part of java.util package.
- An instance of java Random class is used to generate random numbers.
- This class provides several methods to generate random numbers of type integer, double, long, float etc.
- Random number generation algorithm works on the seed value. If not provided, seed value is created from system nano time.
- If two Random instances have same seed value, then they will generate same sequence of random numbers.
- Java Random class is thread-safe, however in multithreaded environment it’s advised to use java.util.concurrent.ThreadLocalRandom class.
- Random class instances are not suitable for security sensitive applications, better to use java.security.SecureRandom in those cases.
Javaのランダムコンストラクタ
JavaのRandomクラスには、以下に示す2つのコンストラクタがあります。
-
- Random(): 新しい乱数生成器を作成します。
- Random(long seed): 指定されたシードを使用して新しい乱数生成器を作成します。
JavaのRandomクラスのメソッド
JavaのRandomクラスのいくつかのメソッドを見てみましょう。
-
- nextBoolean(): このメソッドは、ランダムな数値ジェネレーターシーケンスからブール値としての偽の次の擬似乱数を返します。
-
- nextDouble(): このメソッドは、0.0から1.0の間の擬似乱数として次の偽の倍精度浮動小数点数を返します。
-
- nextFloat(): このメソッドは、0.0から1.0の間の擬似乱数として次の偽の単精度浮動小数点数を返します。
-
- nextInt(): このメソッドは、ランダムな数値ジェネレーターシーケンスから次の整数値を返します。
- nextInt(int n): このメソッドは、ランダムな数値ジェネレーターシーケンスから0から指定された値までの範囲の偽の整数値を返します。
例文:
“JavaのRandomの使用例”
以下のJavaのRandomの例題プログラムを見てみましょう。
package com.scdev.examples;
import java.util.Random;
/**
* Java Random Number Example Program
*
*/
public class RandomNumberExample {
public static void main(String[] args) {
//initialize random number generator
Random random = new Random();
//generates boolean value
System.out.println(random.nextBoolean());
//generates double value
System.out.println(random.nextDouble());
//generates float value
System.out.println(random.nextFloat());
//generates int value
System.out.println(random.nextInt());
//generates int value within specific limit
System.out.println(random.nextInt(20));
}
}
上記のプログラムの出力は以下の通りです:
false
0.30986869120562854
0.6210066
-1348425743
18
Javaの乱数生成についての詳細は、この投稿をチェックしてください。
シードを使用してランダムな数字を生成する。
シードを使用してランダムな数字を生成する方法は2つあります。
Random random = new Random(long seed);
Random random1 = new Random();
random1.setSeed(seed);
メソッドnext(int)によって維持される疑似乱数生成器の内部状態の初期値はシードです。
package com.scdev.examples;
import java.util.Random;
/**
* Java Random Number Using Seed Example Program
*
* @author scdev
*
*/
public class RadomSeedExample {
public static void main(String[] args) {
//using constructor
Random random = new Random(100);
System.out.println("Using Constructor");
System.out.println(random.nextInt());
//using method
Random random2 = new Random();
random2.setSeed(200);
System.out.println("Using Method");
System.out.println(random2.nextInt());
}
}
上記のプログラムの出力は次の通りです。
Using Constructor
-1193959466
Using Method
-1133938638
もし同じシードを二つの異なる乱数生成器に渡したらどうなるでしょうか?以下のプログラムを見て、同じシードを二つの異なる乱数生成器に渡した場合に何が起こるか確認してみましょう。
package com.scdev.examples;
import java.util.Random;
/**
* Java Random Number Using Same Seed Example Program
*
*/
public class RandomNumberSameSeedExample {
public static void main(String[] args) {
//initialize two random number generators using same seed
Random random1 = new Random(100);
Random random2 = new Random(100);
System.out.println(random1.nextInt());
System.out.println(random2.nextInt());
}
}
上記のプログラムの出力は次の通りです。
-1193959466
-1193959466
もし同じシード値を二つの異なる乱数生成器に渡すと、同じランダムな数が生成されることが分かります。
Java 8のRandomクラスのメソッド
上の画像から分かるように、Java 8ではRandomクラスに多くの新しいメソッドが追加されました。これらのメソッドはランダムな数値のストリームを生成することができます。以下は1から100の範囲で5つの整数のストリームを生成する簡単なプログラムです。
package com.scdev.random;
import java.util.Random;
import java.util.stream.IntStream;
public class JavaRandomExample {
public static void main(String[] args) {
Random random = new Random();
// generate stream of 5 ints between 1 to 100
IntStream ints = random.ints(5, 1, 100);
ints.forEach(System.out::println);
}
}