Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Math.random()について

こんにちわ。Javaの学習を始めて一月ぐらいになります。
そのなかで、乱数の作成で引っかかっています。

良くある問題で、さいころの目を題にしたものがあると思うのですが、
その場合、Math.random() * 6 + 1 と回答されていると思います。
それは、
0〜5までの乱数を作成し、作成された乱数に1を加算していて、
乱数:Math.random() * (max - min + 1) + min
という計算式を元に考えられているのですよね?

ただ、0〜10までという問題だと、
Math.random() * 10 という回答になっていると思います。

また、私の勉強している問題集で、
10〜25の乱数を作成するという問題で、
int count = (int)(15 * Math.random() + 10);
という回答になっていました。

0〜10の場合に
Math.random() * (10 - 0 + 1) とはならないのはなぜか?

問題集の回答が
int count = (int)((25 - 10 + 1) * Math.random() + 10);
とはならないのはなぜか?

どなたか解説して頂けないでしょうか。

数学が苦手で文系で過ごしてきました。
もしかしたら、数学に強い人には考えられないような質問かもしれません。

よろしくお願いいたします。

5

回答

4591

閲覧

5件の回答

評価

0

>ただ、0〜10までという問題だと、
>Math.random() * 10 という回答になっていると思います。
これは、0以上10「未満」ではないのでしょうか。
この式では、10という値は何度試行しても出ません。

なので、あなたの理解は正しいです。

評価

0

これはその問題集の表記がおかしいのかもしれませんね。

Math.random() * (発生させたい個数) + (始まりの値)

で私は覚えました(笑)

この場合、問題集の意図するところは
10,11,12 ・・・・ 23,24 の乱数かと思われます。

なので、10 - 24までの数値の個数は 15
                     始まりの値は 10

ということで

15 * Math.random() + 10

となっているように思えます。

・・・質問の内容が【解説】に思えたので
軽く解説しましたが・・・解説になったかな???

評価

0

mioさん、スイカさん
返信ありがとうございました。

0〜10、10〜25の範囲で指定されている場合、
[未満]と考えるのが通例だというところでしょうか。
(厳密な試験などでは、0以上10未満のなどと書いてあるとか)
例で出した2パターンとも「n〜mの」としか書かれておらず、
すっかりmも含むのだと思い込んでいました。

Math.random() * (max - min + 1) + min
または
>Math.random() * (発生させたい個数) + (始まりの値)
で覚えます。

もやもやがすっきりしました。
まだまだこれからですが、Javaの学習、がんばっていきます。

お時間をとっていただいてありがとうございました。

評価

0

> 0〜10、10〜25の範囲で指定されている場合、
>[未満]と考えるのが通例だというところでしょうか。

通例は最大値も含まれるものとして考えるものだと思います。
が、そのように解釈、理解していない人もいますので、
文章内に論理的矛盾があれば、どちらの意味で使っているかその内容を書いた人に確認するしかありません。

> (厳密な試験などでは、0以上10未満のなどと書いてあるとか)

たぶん書いてあるでしょうけど、厳密な試験って何ですか?

評価

0

OneVoiceさん
返信ありがとうございました。

>文章内に論理的矛盾があれば、どちらの意味で使っているかその内容を書いた人に確認するしかありません。

今回は、著者の方に確認するすべはないので、
問題と回答を見て
10〜25の乱数を作成するという問題で、
int count = (int)(15 * Math.random() + 10);
という回答なのであれば、
著者の方は、最大値25は「含まない」という思いで書いておられると判断するということですね。


>厳密な試験って何ですか?

資格試験とか入試とか一点が左右するようなもののことを言ったつもりでした。
今回私は「含む」と思って回答したら、間違っていたので
そういう試験でこう書かれていたら困るなぁと思ったので。

お時間をとっていただいてありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。