Java 乱数(ランダムな値)を生成するサンプル

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)

△上に戻る