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つ出力

以下のソースコードは、Randomクラスを使って0から9の乱数を発生し、コンソール出力するものです。

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 );

nextInt( 10 )で、0~9の乱数を発生させています。

Javaソースコード - seedを指定して0から9の乱数を5つ出力

以下のソースコードは、Randomオブジェクトの生成時に乱数生成の元になる値seedを与えて乱数を発生するものです。

seedは123456で、乱数を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の値を変更すると出力される値のパターンが変わります。

ここからJavaソースコードを解説します。

005
006
		// seedに123456を指定してRandomオブジェクトを生成
		Random rand = new Random( 123456 );

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 ) );

int型の0~9の乱数を5行回出力しています。

Randamオブジェクトにシードを指定しているので、同じパターンの乱数が出力されます。

このように。同じ乱数列を発生する場合は、Randomオブジェクトを生成する際にシードを指定します。

Javaソースコード - いろいろな型の乱数を出力

以下のソースコードは、Randomクラスメソッドを使って、int型/long型/float型/double型/boolean型乱数を発生するものです。

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

int型long型乱数は、それぞれの型が持てる範囲で発生されるので、マイナスの値にもなります。

float型double型乱数は、0.0以上で1.0未満の値を発生します。

boolean型は、「true」または「false」を発生します。

Javaソースコード - 指定した整数範囲の乱数を発生

以下のソースコードは、指定した整数の範囲min~maxの乱数を発生するメソッドを作成した例です。この例では、1~10の乱数を発生しています。

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の乱数を発生しています。

ここからJavaソースコードを解説します。

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の範囲の整数乱数を発生するメソッドです。

minからmaxまでの整数は、( max - min + 1 )種類あります。

例えば、min=2でmax=8の場合、( max - min + 1 ) = ( 8 - 2 + 1 ) = 7となります。

	2  3  4  5  6  7  8

nextInt( 8 - 2 + 1 )、nextInt( 7 )は、0~6の乱数を発生します。

これに、2を足したnextInt( 7 )+2は、2~8の乱数になります。

このように、nextInt( max - min + 1 )+minと書くとmin~maxの乱数を発生することができます。

以上です。

乱数に関するコンテンツ

乱数」に関係があるコンテンツをまとめています。

関連コンテンツ

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

メソッドを抜けるときに使用するreturn文について説明しています。

2020.03.20

Javaのプログラムを作ってみませんか?プログラミングに必要なものの用意から実行までを説明しています。

2020.03.23

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

Swingパッケージを使ってグラフィック表示を行う方法を解説しています。

2020.03.23

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

配列を使うJavaソースコードを多数紹介しています。

2021.05.18

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

三角形、台形、円などいろいろな図形の面積を計算するプログラムを紹介しています。詳しくは、記事をご覧ください。

2021.05.18

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

プログラミング、ITに関する用語をまとめています。

2022.10.17

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

乱数の意味と、Math.randomメソッドの使い方をソースコードを使って詳しく解説しています。

2015.12.27

トランプ(カード)を扱うクラスを紹介しています。

2019.08.05

1から6のサイコロの目が出る確率を割り出すプログラムの作りかたを解説しています。

2020.05.07

配列に格納されている数値をランダムに並び替える方法を詳しく解説しています。ソースコード付きです。

2016.01.31

Javaで扱うデータ型について説明しています。

2020.03.23

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

キーボードを使って整数値を入力する方法を解説しています。Scannerクラスを利用しています。

2023.03.08

オブジェクト指向の考え方を、Javaのソースコードを使って詳しく解説しています。興味のある方は、是非ご覧ください。

2022.09.02

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

自然数と整数って何が違う?

2020.03.23

「ゆるゆるプログラム」のコンテンツを紹介しています。興味のある方はこの記事をご覧ください。

2020.03.23

広告