Javaの乱数を生成するサンプルです。
| 確認環境 ・Java 8 |
目次
乱数を生成する

乱数を生成するRandomクラスとMathクラスのrandomメソッド(※)は、生成される値に偏りがあるといわれ、またシード値がわかると、値が予測できる可能性があります。
※内部でRandomクラスを使用しています。
セキュリティ関連で使用する場合は、SecureRandomクラスを使用しましょう。
以下は、JPCERT/CCのMSC02-J. 高品質の乱数を生成するのリンクです。
https://www.jpcert.or.jp/java-rules/msc02-j.html
以下はJava8 API仕様のSecureRandomクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/security/SecureRandom.html
SecureRandomクラスのサンプル
SecureRandomクラスのサンプルです。
package test1;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class Test1 {
public static void main(String[] args) {
SecureRandom sr1;
try {
sr1 = SecureRandom.getInstance("SHA1PRNG");
// 引数なし
System.out.println(sr1.nextInt()); //例:409928955
// 0〜2の数値を生成
System.out.println(sr1.nextInt(3));
// 1〜3の数値を生成
System.out.println(sr1.nextInt(3)+1);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
9行目のgetInstanceメソッドの引数は、アルゴリズム名です。
その他のアルゴリズム名については、
以下の「SecureRandom乱数生成アルゴリズム」のリンクを参照願います。
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/security/StandardNames.html#SecureRandom
15行目は、nextIntメソッドで0~2のいずれかの数値を生成しています。
18行目は、nextIntで0~2のいずれかの数値を取得し、1を足して1~3としています。
Randomクラスのサンプル
Randomクラスのサンプルです。
package test1;
import java.util.Random;
public class Test1 {
public static void main(String[] args) {
Random r1 = new Random();
// 引数なし
System.out.println(r1.nextInt()); //例:844725120
// 0〜9の数値を生成
System.out.println(r1.nextInt(10)); //
// 1~9の数値を生成
System.out.println(r1.nextInt(9) + 1); //
}
}
12行目は、nextIntメソッドで0~9のいずれかの数値を生成しています。
15行目は、nextIntで0~8のいずれかの数値を取得し、1を足して1~9としています。
以下はJava8 API仕様のRandomクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Random.html
Mathクラスのrandomメソッド
Mathクラスのrandomメソッドのサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
// 引数なし
System.out.println(
Math.random()); //例:0.18921156156291252
// 0〜9の乱数を生成
System.out.println(
(int)(Math.random()*10)); //
// 1~9の乱数を生成
System.out.println(
(int)(Math.random()*9+1)); //
}
}
12行目は、Math.random()*10で、0~9のいずれかの数値を生成します。
16行目は、Math.random()*9で、0~8のいずれかの数値を生成し、1を足して1~9としています。
以下はJava8 API仕様のMathクラスのrandomメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Math.html#random--
関連の記事
Java べき乗を計算するサンプル(pow)
Java 小数第一位で切り上げるサンプル(ceil)
Java 小数第一位で切り捨てるサンプル(floor)
Java 小数第一位で四捨五入するサンプル(round)