2020.08.25

Javaプログラミング

ゾロ目の出る確率

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

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

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

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

Javaソースコード

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

Dice2.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
026
027
028
public class Dice2 {
	public static void main(String[] args) {
		// サイコロを振る回数
		int count = 100000;

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

		// 100000回乱数を発生(サイコロを振る)
		for ( int i = 1; i <= count; ++ i ) {
			// 1つ目のサイコロ 1から6の乱数を発生
			int deme1 =  (int)( Math.random() * 6.0 ) + 1;

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

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

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

実行結果

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Dice2.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Dice2.java

実行

C:\talavax\javasample>java Dice2

出力結果

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

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

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

Javaソースコードの解説

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

001
public class Dice2 {

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

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

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

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

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

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

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

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

			// 2つ目のサイコロ 1から6の乱数を発生
			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
018
019
			// 同じ数だったら出目(deme)の配列にに1を足す
			if ( deme1 == deme2 )
				++ zorome_num;  

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

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

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

以上です。

前のコンテンツ

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

2020.05.07

関連コンテンツ

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

2022.09.10

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

2021.05.18

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

2023.03.20

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

2020.03.23

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

2022.12.13

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

2020.03.23

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

2020.03.23

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

2020.03.23

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

2020.05.07

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

2022.08.03

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

2015.12.27

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

2020.03.23

処理を繰り返すために使用するfor文について解説しています。

2020.03.23

繰り返し処理の作り方を解説しています。

2016.03.02

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

2015.11.01

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

2020.03.23

整数型の変数に1を足すインクリメント、1つ引くデクリメントについて詳しく説明しています。

2020.03.23

広告