/*
* 練習問題22.5 p.565
* 6面のサイコロの個数が指定されると、可能性のある合計値ごとの理論的確率を計算できます。
* たとえば、2個の6面サイコロでは、合計が7になる確率は、1/6です。
* プログラムを作成して、特定の個数の6面サイコロでの合計値の理論的分布を、
* 1から6までの数を発生するRandomを使用して膨大な数のサイコロを「振った」結果と比較しなさい。
* どの乱数発生メソッドを使用するかは、問題となりますか。
*/
package ch22.ex22_05;
import java.util.Random;
public class DiceExperiment
{
public static void main(String[] args)
{
int diceNumber = 2; // サイコロの数
int trialNumber = 10000; // (膨大な)試行回数
int[] actualResult = new int[diceNumber * 6 + 1]; // 可能性のある合計値ごとのカウント値
Random rnd = new Random();
double[] probability2 = {0.0, 0.0, 1.0/36.0, 2.0/36.0, 3.0/36.0, 4.0/36.0, 5.0/36.0, 6.0/36.0, 5.0/36.0, 4.0/36.0, 3.0/36.0, 2.0/36.0, 1.0/36.0};
int tmp = 0;
for (int i = 0; i < trialNumber; i++)
{
tmp = 0;
for (int j = 0; j < diceNumber; j++)
{
tmp += (rnd.nextInt(6) + 1);
}
actualResult[tmp]++;
}
for (int i = diceNumber; i <= diceNumber * 6; i++)
{
if (diceNumber == 2)
{
System.out.printf("Number: %3d, Probability: %4f, Actual result: %4f%n", i, probability2[i], (double)actualResult[i]/(double)trialNumber);
}
else
{
System.out.printf("Number: %3d, Probability: ??, Actual result: %4f", i, actualResult[i]);
}
}
}
}