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

2020/08/25 公開

・ゾロ目の出る確率

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の数を発生し、それぞれの数値が出現する回数を調べます。

■新着情報

2021.06.18 変数の初期値 変数に値を代入しないで計算
2021.05.28 短針と長針の角度 短針と長針の角度は?
2021.05.19 各位(くらい)を求める 1の位の値は?10の位は?

■広告

Topへ