【レビュー】ウバッグの代わりにおすすめの業務用デリバリーバッグ【配達員必見】
配達員必見!雨の日の配達におすすめな防水グッズまとめ

雨の日の配達におすすめしたい防水対策グッズを紹介&レビューしました↓

今すぐチェック
ウーバーイーツにおすすめな自転車を徹底比較!フーデリ配達員必見🚴‍♀️
【楽天市場】毎朝10時更新!24時間限定タイムセール開催中!
【Amazon】人気商品が日替わりで登場! 毎日お得なタイムセール!
短期バイトなら治験がおすすめ 1泊2万円案件あり【解説記事あり】🛏

サイコロの出た目の数をカウントするプログラムをJavaで作る方法

Java
雑ログYOUTUBE

2022年5月のタイ旅行動画や飼い猫動画をアップしています。

お洒落なカフェや絶景スポット、キャンプ動画などなど。

読み放題ならkindle

アマゾンのkindleunlimitedならタブレットでもスマホでも本や漫画やガイドブックが読み放題。

おすすめの漫画はこちらで紹介しています。

今なら初回30日間無料キャンペーン中。

アマゾンでチェック

スポンサーリンク

理論上では六面のサイコロのそれぞれの目が出る確率は1/6です。

「理論上」というのは、実際のサイコロは面に開いた穴の大きさだったり、転がした場所と面の摩擦だったり、空気抵抗だったりと色々な物理的制約があるため現実には誤差が生じるという意味です。

created by Rinker
¥858 (2024/04/25 08:01:38時点 Amazon調べ-詳細)

しかし、誰しもが一心不乱にサイコロを振り続け、本当に確率が1/6になるのか試した経験があると思います。

僕は10回ぐらいやってすぐに諦めましたが。

created by Rinker
¥2,420 (2024/04/25 08:01:39時点 Amazon調べ-詳細)
スポンサーリンク

振ったサイコロの出た目をカウントする

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業界はいけます。本人の努力次第です。

コメント

タイトルとURLをコピーしました