Javaプログラミング学習サイト ゆるゆるプログラミング

・ゾロ目の出る確率

2つのサイコロを振って、同じ数が出る確率を確認するJavaのプログラムを紹介します。

ここでは、2つのサイコロの出目を1から6の乱数で発生し、その出目が同じときと回数と確率を確認します。

理論上、ゾロ目になる確率は6/36=1/6≒16.6667%です。

1のゾロ目が出る確率は1/36なので、1から6のいずれかのゾロ目が出る確率は6/36=1/6となります。

それでは、ゾロ目の確率を調べるJavaのソースコードをみていきましょう。

Dice2.java ← クリックしてダウンロードページに移動
001:    public class Dice2 {
002:    	public static void main(String[] args) {
003:    		// サイコロを振る回数
004:    		int count = 100000;
005:    
006:    		// ゾロ目の回数
007:    		int zorome_num = 0;
008:    
009:    		// 100000回乱数を発生(サイコロを振る)
010:    		for ( int i = 1; i <= count; ++ i ) {
011:    			// 1つ目のサイコロ 1から6の乱数を発生
012:    			int deme1 = (int)( Math.random() * 6.0 ) + 1;
013:    
014:    			// 2つ目のサイコロ 1から6の乱数を発生
015:    			int deme2 = (int)( Math.random() * 6.0 ) + 1;
016:    
017:    			// 同じ数だったら出目(deme)の配列にに1を足す
018:    			if ( deme1 == deme2 )
019:    				++ zorome_num;  
020:    		}
021:    
022:    		// 結果を表示
023:    		System.out.println( "サイコロを振った回数:" + count + "回" );
024:    		System.out.println( "ゾロ目の回数:" + zorome_num + "回" );
025:    		System.out.println( "ゾロ目の確率:"
026:    			 + (double)zorome_num / (double)count * 100.0 + "%" );
027:    	}
028:    }

Dice2.javaの出力結果

サイコロを振った回数:100000回
ゾロ目の回数:16376回
ゾロ目の確率:16.375999999999998%

実行結果は、毎回違います。

ゾロ目の確率が1/6≒0.166666...(16.6666...%)に近ければ理論どおりであるといえます。この出現確率はサイコロを振る回数によって変わります。一般的には、サイコロを振る回数が多いほど理論値に近づいていきます。

ここからソースコードを順番に解説していきます。

001:    public class Dice2 {

クラス名を、Dice2としています。

003:    		// サイコロを振る回数
004:    		int count = 100000;

サイコロを振る回数(count=100000)を宣言しています。

006:    		// ゾロ目の回数
007:    		int zorome_num = 0;

ゾロ目の回数を格納する変数を宣言して、初期値を0にしています。

009:    		// 100000回乱数を発生(サイコロを振る)
010:    		for ( int i = 1; i <= count; ++ i ) {

for文でcount回のループしています。

011:    			// 1つ目のサイコロ 1から6の乱数を発生
012:    			int deme1 = (int)( Math.random() * 6.0 ) + 1;
013:    
014:    			// 2つ目のサイコロ 1から6の乱数を発生
015:    			int deme2 = (int)( Math.random() * 6.0 ) + 1;

1~6の乱数をMath.randomメソッドを使って発生し、int型変数deme1とdeme2に格納しています。

Math.random()は0.0から1.0未満の値を発生するので、"Math.random()*6.0"は0.0~6.0未満の値を発生します。これをint型型キャストすると0~5の整数値になります("(int)(Math.random()*6.0)"の部分)。型キャストした値の小数点以下は切り捨てになるので6に近い値5.9999でも5になります。最後に1を足すと1~6の乱数になります。

Math.randomメソッド

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

  パラメータ なし

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

017:    			// 同じ数だったら出目(deme)の配列にに1を足す
018:    			if ( deme1 == deme2 )
019:    				++ zorome_num;  

変数deme1とdeme2が同じ値であればゾロ目なので、ゾロ目の回数を格納している変数zorome_numをインクリメント(1足す)します。

022:    		// 結果を表示
023:    		System.out.println( "サイコロを振った回数:" + count + "回" );
024:    		System.out.println( "ゾロ目の回数:" + zorome_num + "回" );
025:    		System.out.println( "ゾロ目の確率:"
026:    			 + (double)zorome_num / (double)count * 100.0 + "%" );

結果をprintlnメソッドコンソール出力しています。ゾロ目の確率(%)は、ゾロ目の回数をサイコロを振った回数で割って100を掛けで計算しています。

■関連コンテンツ

Javaの配列 同じ型の変数をまとめた配列について解説
インクリメント・デクリメント演算子 インクリメント、デクリメント演算子について解説
Math.randomの使い方について解説-画像

乱数 random

Math.randomメソッドを使って乱数を発生する方法を解説します。指定範囲の乱数の発生方法も解説しています。

繰り返し処理に使用するfor文について解説-画像

for文

繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。

サイコロの目のでる確率は?-画像

サイコロの出目確率

乱数で1から6の数を発生し、それぞれの数値が出現する回数を調べます。

■新着情報

2020.10.28 1からNの和 1+2+3+ … +N=?
2020.10.21 画像の上下反転 画像を上下反転する方法
2020.10.19 指定色の画素数取得 指定RGBの画素数は何個?
2020.10.13 2値化 その2 2値のBMP画像を作成
2020.10.07 3辺の長さで三角形かを判定 3辺abcで三角形が作れるか?
2020.10.06 画像のミラー反転 画像をミラー(鏡)反転する方法
2020.09.03 お札とコインの数 必要なお札と硬貨の枚数?

■広告

フィギュア予約最大25%OFF+ポイント5%還元!ホビーサーチ

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

 

 

 

 

 

 

 

Topへ