Javaの乱数(ランダムな値)を生成するサンプルです。
目次
サンプル | 乱数を生成する |
Randomクラスでランダムな値を生成する | |
Mathクラスでランダムな値を生成する | |
SecureRandomクラスでランダムな値を生成する | |
配列の値をランダムに表示する |
乱数を生成する
- Randomクラスは、乱数を生成する値に偏りがあるといわれます。
またシード値がわかると値が予測できる可能性があります。 - Mathクラスのrandomメソッドは、内部でRandomクラスを使用しています。
- セキュリティ関連で使用する場合は、SecureRandomクラスを使用します。
- 以下はOracleのJava8 API仕様のSecureRandomクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/security/SecureRandom.html
Randomクラスでランダムな値を生成する
public class Random extends Object implements Serializable |
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
System.out.println(r1.nextInt(10)); //0〜9
System.out.println(r1.nextInt(9) + 1); //1~9
}
}
7行目は、乱数を生成しています。
10行目は、nextIntメソッドで0から9の値をランダムに返します。
11行目は、nextIntメソッドで1から9の値をランダムに返します。
以下はJava8 API仕様のRandomクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Random.html
Mathクラスでランダムな値を生成する
public static double random() |
Mathクラスのrandomメソッドのサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
double r1 = Math.random();
System.out.println(r1); //例:0.38409010226988394
System.out.println((int)(Math.random()*10)); //0〜9
System.out.println((int)(Math.random()*9+1)); //1~9
}
}
6行目は、乱数を生成しています。
12行目は、randomメソッドで0から9の値をランダムに返します。
16行目は、randomメソッドで1から9の値をランダムに返します。
以下はJava8 API仕様のMathクラスのrandomメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Math.html#random--
SecureRandomクラスでランダムな値を生成する
public class SecureRandom extends Random |
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メソッドの引数の「SHA1PRNG」は、アルゴリズム名です。
その他のアルゴリズム名については、
以下のOracleの「SecureRandom乱数生成アルゴリズム」のリンクを参照願います。
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/security/StandardNames.html#SecureRandom
15行目は、nextIntメソッドで0から2の値をランダムに返します。
18行目は、nextIntメソッドで0から2の値をランダムに返します。
配列の値をランダムに表示する
上記のSecureRandomクラスを使用して配列の値をランダムに表示するサンプルです。
package test1;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class Test1 {
public static void main(String[] args) {
SecureRandom sr1;
String[] a = {"赤","黄","青"};
try {
sr1 = SecureRandom.getInstance("SHA1PRNG");
int b = sr1.nextInt(3);// 0〜2
System.out.println(a[b]);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
9行目は、配列です。
12行目は、乱数を生成しています。
14行目は、nextIntメソッドで0から2の値をランダムに返します。配列のインデックス値になります。
16行目は、配列の値をランダムに表示します。
関連の記事
Java Mathクラスの関数(べき乗/平方根/立方根他)
Java 切り上げのサンプル(ceil)
Java 切り捨てのサンプル(floor)
Java 四捨五入するサンプル(round)