2025.02.04
乱数を生成するRandomクラス
Randomクラスとは
Randomクラスは、擬似乱数を生成するために使用するものです。
乱数は、不規則で予測不能な数のことで、パスワードの自動生成や、カードゲームの並び替え、サイコロを振るなど、いろいろな用途で使用されます。
以下が、乱数を発生するRandomクラスです。
Randomコンストラクタ
Random()
・新規乱数ジェネレータを作成します。 パラメータ なし
Random( long seed )
・単一のlong型のシードを使って、新しい乱数ジェネレータを作成します。 パラメータ seed : 乱数を作るための基となるデータ
Random.nextIntメソッド
public int nextInt()
・この乱数ジェネレータのシーケンスを使って、一様分布のint型の次の擬似乱数値を返します パラメータ なし 戻り値 この乱数ジェネレータのシーケンスを使って生成された、一様分布のint型の次の擬似乱数値
public int nextInt( int bound )
・この乱数ジェネレータのシーケンスを使って、0から指定された値の範囲(0は含むが、 その指定された値は含まない)で一様分布のint型の擬似乱数値を返します。 パラメータ bound : 乱数の上限。正の値で指定。 戻り値 この乱数ジェネレータのシーケンスを使った、0(含む)からbound(含まない)の範囲で一様分布の、 int型の次の擬似乱数値
Random.nextLongメソッド
public long nextLong()
・この乱数ジェネレータのシーケンスを使って、一様分布のlong型の次の擬似乱数値を返します。 nextLongの一般規約では、1つのlong型の値が擬似乱数として生成されて返されます。 パラメータ なし 戻り値 この乱数ジェネレータのシーケンスを使って生成された、一様分布のlong型の次の擬似乱数値
Random.nextFloatメソッド
public float nextFloat()
・この乱数ジェネレータのシーケンスを使って、0.0から1.0の範囲で一様分布のfloat型の 次の擬似乱数値を返します。 パラメータ なし 戻り値 この乱数ジェネレータのシーケンスを使って生成された、 0.0から1.0の範囲の一様分布のfloat型の次の擬似乱数値
Random.nextDoubleメソッド
public double nextDouble()
・この乱数ジェネレータのシーケンスを使って、0.0から1.0の範囲で一様分布のdouble型の 次の擬似乱数値を返します。 パラメータ なし 戻り値 この乱数ジェネレータのシーケンスを使って生成された、 0.0から1.0の範囲の一様分布のdouble型の次の擬似乱数値
Random.nextBooleanメソッド
public boolean nextBoolean()
・この乱数ジェネレータのシーケンスを使って、一様分布のboolean型の次の擬似乱数値を返します。 nextBooleanの一般規約では、1つのboolean型の値が擬似乱数として生成されて返されます。 パラメータ なし 戻り値 この乱数ジェネレータのシーケンスを使って生成された、一様分布のboolean型の次の擬似乱数値
Javaソースコード - 1~9の乱数を1つ出力
Random4.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014
import java.util.Random; public class Random4 { public static void main( String[] args ) { // Randomオブジェクトを生成 Random rand = new Random(); // 発生した0~9の乱数をrndに格納 int rnd = rand.nextInt( 10 ); // 変数rndを出力 System.out.print( rnd ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Random4.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Random4.java
実行
C:\talavax\javasample>java Random4
実行結果1
4
実行結果2
1
実行結果3
3
実行する毎に、出力される値が変わります。
ここからソースコードの一部を解説しまます。
001
import java.util.Random;
Javaのクラスライブラリの中から「import java.util.Random」というパッケージにあるクラスを、このプログラム内で使うために記述します。
この記述により、Randomクラスが利用できるようになります。
008 009
// 発生した0~9の乱数をrndに格納 int rnd = rand.nextInt( 10 );
Javaソースコード - seedを指定して0から9の乱数を5つ出力
Random5.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015
import java.util.Random; public class Random5 { public static void main( String[] args ) { // seedに123456を指定してRandomオブジェクトを生成 Random rand = new Random( 123456 ); // 0から9までの乱数を5つ出力 System.out.println( rand.nextInt( 10 ) ); System.out.println( rand.nextInt( 10 ) ); System.out.println( rand.nextInt( 10 ) ); System.out.println( rand.nextInt( 10 ) ); System.out.println( rand.nextInt( 10 ) ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Random5.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Random5.java
実行
C:\talavax\javasample>java Random5
実行結果1
3 7 7 5 8
実行結果2
3 7 7 5 8
実行結果3
3 7 7 5 8
seedを与えているので、毎回同じ値が出力されます。
Randomオブジェクトの生成で指定したseedの値を変更すると出力される値のパターンが変わります。
005 006
// seedに123456を指定してRandomオブジェクトを生成
Random rand = new Random( 123456 );
008 009 010 011 012 013
// 0から9までの乱数を5つ出力
System.out.println( rand.nextInt( 10 ) );
System.out.println( rand.nextInt( 10 ) );
System.out.println( rand.nextInt( 10 ) );
System.out.println( rand.nextInt( 10 ) );
System.out.println( rand.nextInt( 10 ) );
Javaソースコード - いろいろな型の乱数を出力
Random6.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023
import java.util.Random; public class Random6 { public static void main( String[] args ) { // Randomオブジェクトを生成 Random rand = new Random(); // int型の乱数を出力 System.out.println( rand.nextInt() ); // long型の乱数を出力 System.out.println( rand.nextLong() ); // float型の乱数を出力 System.out.println( rand.nextFloat() ); // double型の乱数を出力 System.out.println( rand.nextDouble() ); // boolean型の乱数を出力 System.out.println( rand.nextBoolean() ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Random6.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Random6.java
実行
C:\talavax\javasample>java Random6
実行結果1
-146028983 -4414664265104478942 0.25325185 0.7986512917892548 true
実行結果2
1292734667 6884048785565067347 0.26474917 0.6046428524434359 true
実行結果3
2110130158 6399806085020879865 0.008584321 0.9720493904888805 false
Javaソースコード - 指定した整数範囲の乱数を発生
Random7.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025
import java.util.Random; public class Random7 { // 指定した範囲min~maxの乱数を発生する private static int random( int min, int max ) { // Randomオブジェクトを生成 Random rand = new Random(); // min~maxの乱数を発生 return rand.nextInt( max - min + 1 ) + min; } // メイン public static void main( String[] args ) { // 乱数を20回生成 for ( int i = 0; i < 20; i++ ) { // 1から10までの乱数rndに代入 int rnd = random( 1, 10 ); // 変数rndを出力 System.out.println( rnd ); } } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Random7.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Random7.java
実行
C:\talavax\javasample>java Random7
実行結果1
4 6 4 10 4 8 6 9 6 9 4 8 1 3 2 7 8 1 2 1
実行結果2
6 3 1 10 8 4 6 9 9 8 5 6 10 9 3 10 4 10 4 9
実行結果3
1 5 2 8 8 10 8 7 8 6 1 8 9 4 3 10 6 3 7 7
1から10の乱数を発生しています。
004 005 006 007 008 009 010 011 012
// 指定した範囲min~maxの乱数を発生する private static int random( int min, int max ) { // Randomオブジェクトを生成 Random rand = new Random(); // min~maxの乱数を発生 return rand.nextInt( max - min + 1 ) + min; }
minからmaxまでの整数は、( max - min + 1 )種類あります。
例えば、min=2でmax=8の場合、( max - min + 1 ) = ( 8 - 2 + 1 ) = 7となります。
2 3 4 5 6 7 8
以上です。
乱数に関するコンテンツ
「乱数」に関係があるコンテンツをまとめています。