理論上では六面のサイコロのそれぞれの目が出る確率は1/6です。
「理論上」というのは、実際のサイコロは面に開いた穴の大きさだったり、転がした場所と面の摩擦だったり、空気抵抗だったりと色々な物理的制約があるため現実には誤差が生じるという意味です。
しかし、誰しもが一心不乱にサイコロを振り続け、本当に確率が1/6になるのか試した経験があると思います。
僕は10回ぐらいやってすぐに諦めましたが。
振ったサイコロの出た目をカウントする
Javaでサイコロの出た目をカウントするプログラムを作ってみました。
このソースコードを使えばサイコロを振れば振るほど確率が理論値に近づいていくのが良く分かります。
import java.util.Random;//(1)Randomクラスをインポート public class Try { public static void main(String[] args){ Random r = new Random(); //(2) Randomクラスのオブジェクトを変数rに格納 int freq[] = new int[7]; //(3)要素が7つの配列を生成 for(int roll=1; roll<100; roll++){ //(4)for文を使ってサイコロを100回振る ++freq[1+r.nextInt(6)]; //(5)出た目をカウントする } System.out.println("Face \tFrequency");// for(int face=1; face<freq.length;face++){ System.out.println(face + "\t\t" + freq[face]); //(6)画面に出力 } }}
(1)Randomクラスをインポートする
1から6までの乱数を自動で生成をするためにRandomクラスをインポートします。
import java.util.Random;
(2)Randomクラスのオブジェクトを生成する
Random r = new Random();
Randomクラスのオブジェクトを生成し、それを変数rに格納します。
(3)サイコロの各目が要素となる配列を生成
int freq[] = new int[7];
ここではnew int[7]と要素が7つありますが、配列のindexは0から始まるのでnew int[6]だと0から5までの数字しか使えないからです。
(4)for文でサイコロを100回振る
for(int roll=1; roll<100; roll++){
int型のrollを定義し、ボディの内部の作業を100回繰り返します。
(※追記 100ではなく99になってました。)
(5)出た目をカウントする
++freq[1+r.nextInt(6)];
ここが一番重要です。
まずは[]の中でr.nextInt(6)メソッドを使い0~5までの乱数を発生させます。
しかし、サイコロの目には0はないので1を足します。
こうすることで[0,1,2,3,4,5]が[1,2,3,4,5,6]の配列になります。
そして一番前の++でそれぞれの出た目をカウントしていきます。
例えば一番最初のforループ(roll=1)でfreq[3]が出たら、freq[3]=1(回)、次のループ(roll=2)でもfreq[3]が出たらfreq[3]=2(回)、次のループでfreq[6]が出たらfreq[6]=(1回)、と出た目の数をカウントしていきます。
(6)結果を出力する
for(int face=1; face<freq.length;face++){ System.out.println(face + "\t\t" + freq[face]);
100回ループが終わると各目の出た数を出力します。
ここでもfor文を使います。faceは面という意味でfrequencyは頻度という意味です。
結果
結果はこうなりました。
Face Frequency 1 15 2 12 3 20 4 20 5 15 6 17
なんとなく理論値に近づきます。
これは100回ですが、数を増やしていけばさらに近づいていきます。
一億回振るとこうなります。
Face Frequency 1 16660456 2 16667744 3 16668020 4 16668572 5 16671583 6 16663624
数が大きすぎで理論値から離れている気もしますが、確率的には1/6に近づいています。
参考
この動画を参考にしました。
10年前くらいの動画ですが、Javaを学ぶにはとても良いです。
プログラミングをオンラインで学ぶ
プログラミングはオンラインで効率よく学べます。
オススメは業界最大大手のTECHACADEMYですね。
今ならブートキャンプの無料体験もやっています。文系でも心配はありません。未経験でIT業界は今時普通のことです。
CodeCampもオンラインプログラミング学習では有名ですね。
完全未経験からWebサービスを開発するまでをマンツーマンでとことんレッスンしてくれます。家庭教師という印象が強く、わからないことがあってもすぐに質問することが出来ます。
転職×未経験×エンジニア
完全未経験からエンジニアを目指す場合はDMMのウェブキャンプがおすすめです。
私の知り合いでも完全未経験からIT企業に転職し、今はWEBデザイナーとして働いている女性がいます。
未経験でもIT業界はいけます。本人の努力次第です。
コメント