🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

3479閲覧

二つのサイコロを振って目の合計を出力

deliveryboy

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/11/24 07:00

編集2019/11/24 08:28

前提・実現したいこと

二つのサイコロを振って、目の合計を出力するプログラムを作りたいです。
条件としてgetRandomIntという自作関数を使用します。

発生している問題・エラーメッセージ

実行結果が以下のようになってしまいます。

イメージ説明

該当のソースコード

java

1public class Ex08_01 { 2 static double getRandomDouble(double low, double high) { 3 double ans = 0.0; 4 double r = Math.random(); 5 ans = low + r * high; 6 return ans; 7 } 8 static int getRandomInt(int low, int high) {//この関数を使います 9 int ans = 0; 10 ans = (int) getRandomDouble(low, high); 11 return ans; 12 } 13 public static void main(String[] args) { 14 int i,total; 15 int[] d = {0,0,0,0,0,0,0,0,0,0,0}; 16 i = 0; 17 total = 0; 18 while(i < 3600) {//3600回振ります 19 int x = getRandomInt(0, 6);//サイコロX 20 int y = getRandomInt(0, 6);//サイコロY 21 total = x + y; 22 d[total]++; 23 i++; 24 } 25 System.out.println("二つのサイコロを振ったとき、");//目の合計がそれぞれ何回あったのか出力します 26 System.out.println("目の合計が2だったのは"+d[0]+"回"); 27 System.out.println("目の合計が3だったのは"+d[1]+"回"); 28 System.out.println("目の合計が4だったのは"+d[2]+"回"); 29 System.out.println("目の合計が5だったのは"+d[3]+"回"); 30 System.out.println("目の合計が6だったのは"+d[4]+"回"); 31 System.out.println("目の合計が7だったのは"+d[5]+"回"); 32 System.out.println("目の合計が8だったのは"+d[6]+"回"); 33 System.out.println("目の合計が9だったのは"+d[7]+"回"); 34 System.out.println("目の合計が10だったのは"+d[8]+"回"); 35 System.out.println("目の合計が11だったのは"+d[9]+"回"); 36 System.out.println("目の合計が12だったのは"+d[10]+"回"); 37 } 38}

試したこと

インターネットで調べましたが、自作関数を使用するという条件にあるため、解決できませんでした。

補足情報(FW/ツールのバージョンなど)

質問に不十分なところがあれば、修正希望お待ちしています。

また、プログラミング初心者のため根本的におかしいところがあるかもしれませんが、お手柔らかにお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2019/11/24 07:09

『合計の値』というのは、出た目の総合計ということですか?
BeatStar

2019/11/24 07:11

何がわからないのでしょうか。 質問の意図と内容が違う気がします。
deliveryboy

2019/11/24 08:22

二つのサイコロの出た目の合計ということです。 例えば、サイコロX=1、サイコロY=1だったら、2になります。 それを、3だった場合、4だった場合・・・12だった場合というように分類して出力したいです。
swordone

2019/11/24 09:22 編集

コードを貼って実行してみましたが、ちゃんと回数が表示されます。問題が再現しません。 提示したコードが、提示した結果が出たときのコードと異なっていませんか?
deliveryboy

2019/11/24 10:04

swordoneさんのおっしゃる通りでした。気づかせてくださりありがとうございます。
guest

回答4

0

それはそれとして、一つ問題が。

java

1 static double getRandomDouble(double low, double high) { 2 double ans = 0.0; 3 double r = Math.random(); 4 ans = low + r * high; 5 return ans; 6 }

lowからhighの間の乱数を返すメソッドなのでしょうが、
0 ≦ r < 1なので、0 ≦ r * high < highで、
low ≦ ans < low + highとなり、範囲がずれます。
これはたまたまlowが0なので問題にはなっていませんが。

乱数で得られる数は最大最小の差である必要があります。

java

1 static double getRandomDouble(double low, double high) { 2 double ans = 0.0; 3 double r = Math.random(); 4 ans = low + r * (high - low); 5 return ans; 6 }

こうすると、0 ≦ r * (high - low) < high - lowなので、
low ≦ ans < highとなります。
ただし、この場合highそのものが範囲に入らないので、intにキャストした場合もhighの値そのものが返ってくることがないことに気を付けてください。
highそのものを含めたい場合は、rに掛ける数に1を加えてください。

投稿2019/11/24 12:26

編集2019/11/24 15:53
swordone

総合スコア20669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

deliveryboy

2019/11/24 14:29

ご指摘ありがとうございます。その問題ですが、4行目を ans = low + r * high / 2; に変更すれば解決いたしますでしょうか?ご教授頂きたいです。
guest

0

サイコロの目の最低値が2なので
d[total]++; ⇒ d[total-2]++;
じゃないとd[0]に値が入りません。

投稿2019/11/24 07:17

masakifukuta

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2019/11/24 08:42

そもそも今、サイコロの目が0から5なので、出目の和は0から10になります。
guest

0

自己解決

swordoneさんのおっしゃるとおり、提示したコードと、提示した結果が出たときのコードと間違っていました。提示したコードで実行したら以下のようになりました。たくさんの回答ありがとうございました。
イメージ説明

投稿2019/11/24 10:02

deliveryboy

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

     //目の合計がそれぞれ何回あったのか出力します
↑↑↑↑↑ここに全角スペースが入っています。


プログラミング用のフォントは 0O 1Il 等を見分けやすくなって、ストレスが減るのでぜひ入れておいてください。
全角スペースを⛶こんなような表示にしてくれるものがあります。

今だと「白源」さんなんかがいいんじゃないでしょうか?(関係者ではありません)
【文字幅 半角3:全角5 も追加】Ricty を神フォントだと崇める僕が、フリーライセンスのプログラミングフォント「白源」を作った話 - Qiita

投稿2019/11/24 07:18

編集2019/11/24 08:05
TN8001

総合スコア9855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問