2015.12.27

数学

random

乱数(ランダム)

乱数は、不規則で予測不能な数のことです。

JavaMath.randomメソッドは0.0以上で1.0より小さい実数の乱数を得ることができます。

この値は何らかの計算式により求められているので本当の意味での乱数ではありませんが、数値発生の規則性が少ないで乱数として使用されます。このような方法で作る乱数擬似乱数と呼ばれています。

Math.randomメソッドの仕様は以下のとおりです。

Math.randomメソッド

public static double Math.random()
・乱数を返します。

  パラメータ なし

  戻り値     0.0以上、1.0未満の乱数

以下は、Math.メソッド戻り値を出力するソースコードです。

Random0.java

001
002
003
004
005
006
007
008
009
public class Random0 {
	public static void main( String[] args ) {
		// 発生した乱数をrndに格納
		double rnd = Math.random();

		// 変数rndを出力
		System.out.print( rnd );
	}
}

Math.randomメソッドは、呼び出すごとに戻す値が違います。

5回実行した結果をみてください。0以上1未満の実数値がランダムに出力されることがわかります。

実行結果 1回目

0.33463196523219774

実行結果 2回目

0.925589633182915

実行結果 3回目

0.3676754227663921

実行結果 4回目

0.4094183184624186

実行結果 5回目

0.18181215808166573

乱数を発生するJavaサンプル

ここからは、このメソッドを利用して、指定した範囲の乱数を発生する方法をいくつかの例で説明します。

0.0以上、10.0未満のdouble型の乱数を発生

Math.randomメソッドに10.0を掛けます。

    double rnd = Math.random() * 10.0;

Math.random()に10.0を掛けた値の最小値は0.000...で、最大値は9.999...になります。

Random1.java

001
002
003
004
005
006
007
008
009
public class Random1 {
	public static void main( String[] args ) {
		// 0.0以上、10.0未満のdouble型の乱数を発生
		double rnd = Math.random() * 10.0;

		// 変数rndを出力
		System.out.print( rnd );
	}
}

0から99のint型の乱数を発生

Math.randomメソッドに100.0を掛けてint型型キャストします。

    int rnd =  (int)( Math.random() * 100.0 );

Math.random()に100.0を掛けた値の最小値は0.000...で、最大値は99.999...です。この値をint型キャストすることで小数点以下が切り捨てられ、0~99の乱数を発生することができます。

Random2.java

001
002
003
004
005
006
007
008
009
public class Random2 {
	public static void main( String[] args ) {
		// 0から99のint型の乱数を発生
		int rnd =   (int)( Math.random() * 100.0 );

		// 変数rndを出力
		System.out.print( rnd );
	}
}

-50から50のint型の乱数を発生

Math.randomメソッドに101.0を掛けてint型型キャストした値から50を引きます。

    int rnd =  (int)( Math.random() * 101.0 ) - 50;

Math.random()に101.0を掛けた値の最小値は0.000...で、最大値は100.999...です。この値をint型キャストすることで小数点以下が切り捨てられ、0~100の乱数を発生することができます。さらに50を引くことで-50~50の値が得られます。

Random3.java

001
002
003
004
005
006
007
008
009
public class Random3 {
	public static void main( String[] args ) {
		// -50から50のint型の乱数を発生
		 int rnd =   (int)( Math.random() * 101.0 ) - 50;

		// 変数rndを出力
		System.out.print( rnd );
	}
}

乱数の利用例

ギャンブルゲームの作成(サイコロトランプ、ルーレット、じゃんけんなど)

ゲームでの敵の動き、出現確率

パスワードの自動生成

暗号鍵の生成

標本の無作為抽出

ノイズの生成

関連コンテンツ

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

2022.10.25

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

2020.05.07

2つのサイコロを振って同じ目が出る確率を割り出すプログラムの作り方を解説しています。

2020.08.25

乱数を使って指定サイズのノイズ画像を作る方法を解説します。Javaのソースコード付きです。

2016.05.26

乱数を使って指定の画像にノイズ画像を加える方法を解説します。

2016.06.14

乱数を使って指定サイズのノイズ画像を作る方法を解説します。ノイズが発生する割合はパーセントで指定します。

2020.11.11

円の中心座標(0,0)、半径rで表される円の円周上のランダムな座標を求めるJavaのソースコードを紹介しています。ラジアンを乱数で発生して座標を計算しています。

2019.09.27

円の中心座標(0,0)、半径rで表される円の円周上のランダムな座標を求めるJavaのソースコードを紹介しています。度単位の角度の乱数をラジアンに変換して座標を計算しています。

2019.09.27

円の中心座標(ox,oy)、半径rで表される円の円周上のランダムな座標を求めるJavaのソースコードを紹介しています。

2019.09.27

1つだけ違う文字を目視で探す「文字の間違い探し」をJavaで作成しました。

2020.06.02

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

2015.11.29

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

2020.03.23

基本的な計算である足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)を行うプログラム作成。

2020.03.23

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

2020.03.23

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

2022.12.13

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

2020.03.23

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

2020.03.23

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

2020.03.23

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

2022.08.03

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

2020.03.23

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

2020.03.20

2つの値のうち、小さい方の値と、大きい方の値を取得する方法。

2020.03.23

データの型を変換する方法を詳しく解説しています。例)int型 → long型

2015.11.01

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

2019.08.05

簡単な「じゃんけん」ゲームの作り方をソースコードを使って詳しく説明しています。

2023.05.22

基準とする座標に最も近い座標を複数の座標から探す方法は?

2021.03.10

連続で「じゃんけん」ができるプログラムの作り方をソースコードを使って詳しく説明しています。

2023.05.23

トランプゲームの1つポーカーの役を判定をプログラムを作成してみませんか?。興味のある方は、ご覧ください。

2020.08.27

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

2016.01.31

画像を、幾何学模様のカラフルなガラスを張って作られたような画像に変換する方法を解説しています。ソースコード付きです。

2017.03.01

広告