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 ) {
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メソッド
■乱数を返します。 パラメータ なし 戻り値 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の配列 | 同じ型の変数をまとめた配列について解説 |
インクリメント・デクリメント演算子 | インクリメント、デクリメント演算子について解説 |
![]() |
乱数 randomMath.randomメソッドを使って乱数を発生する方法を解説します。指定範囲の乱数の発生方法も解説しています。 |
![]() |
for文繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。 |
![]() |
サイコロの出目確率乱数で1から6の数を発生し、それぞれの数値が出現する回数を調べます。 |
■新着情報
2021.2.10 | 三角形を描く(テキスト版) その2 | 三角形を描く(テキスト版) その2 |
■広告
