###実現したいこと
確率に偏りのあるランダムを使った条件分け処理を実現するために、Math.floor(Math.random()*100)で取得した内容を、数値099の間で範囲を区切った条件分けに使用する。1/2程度)までしか実行されていないように見える。
###遭遇した問題点と質問
下に記すコードを実行すると、alert(random)は確実に実行されているように見える。しかし、alert(number(+数値))は、一定数以下(全体の1/3
####疑問点
- この現象が起こっている原因を知りたい。
- 条件の範囲で意図した動作が可能(な可能性がある)ならば、記述例を知りたい。
####条件
- 各処理(const, if)は同等処理が30個前後続く。
- number(+数値)は増加していくが、増加値に規則性はない。
- 1つのjsファイルのみで実行する(データべース等は使用しない)。
JavaScript
1const random = Math.floor(Math.random()*100) 2alert(random); 3 4const number1 = 8; 5const number2 = 15; 6const number3 = 16; 7 8if (random < number1) {alert(number1);} 9else if (random < number2) {alert(number2);} 10else if (random < number3) {alert(number3);} 11
変数1,2,...の値の大小関係はどうなっていますか?
ご指摘ありがとうございます。先にコメントにて失礼します。
下に行くほど大きくしています。
------
処理1条件:randomが0以上9未満で実行
処理2条件:randomが(10以上)13未満で実行
…
「一定数」とは、おおよそどれくらいの数なのか。
具体的に、変数1,2,...に指定している数値は、どのくらいの範囲で、どのような形式の値を指定しているのか。
処理1や処理2で表示(?)を行なっているのはどのような内容か。
実際に、その現象が発生するコードを質問文に書くべきです。
最後に else が無いからでは?
if (~
else if (~
else if (~
else { alert(~
仰る通りのミスはございましたが、訂正しても状態に変化は見られないようです。
どうなれば正しい動作なのかが書いていないのでわかりません。
条件分けをしているからには、条件に適合した場合は該当する処理を実行したいのです。全て二度のalertを確認したいところ、数字が大きくなると二度目のalert(各条件での処理)が確認できないため、頭を悩ませている次第です。
実際に何個ぐらい変数があって、「全体の1/3~1/2程度」って何個ぐらいなのか。
二度目の alert が出るコードにはなっていません。else がどういうものか調べてみてください。KojiDoi さんの回答が正解のように見えます。
恐縮ながら、elseに関しては、参照物の例を出していただけないと察せないかと存じます。
else は「そうでないなら」という意味です。
if (a < 10) { alert("10 未満"); }
else if (a < 20) { alert("10 以上 20 未満"); }
この場合、a が 10 未満なら "10 未満" と alert がでます。
そして a が 10 以上 20 未満なら "10 以上 20 未満" と alert がでます。
そして次の場合は a が 10 未満なら "10 未満" と "20 未満" の二回の alert がでます。
10 以上 20 未満なら "20 未満" と alert がでます。
if (a < 10) { alert("10 未満"); }
if (a < 20) { alert("20 未満"); }
ありがとうございます。前者が意図する動作です。
質問のコードでは乱数が 8 未満で "8"
乱数が 8 以上 15 未満で "15"
乱数が 15 以上 16 未満で "16"
と、メッセージが出ます。確率はそれぞれ 8%, 7%, 1% で、84% は無反応です。alert が二回出る乱数はありません。
number (+ 数値)の最高値は100です。これは書きそびれていたことです。しかしそれ以外のことは質問文に書いたことの繰り返しになるかと思います。複数回のやりとりを経たうえで感じたこととして、質問文の説明が伝わらなかったのなら申し訳なく思いますが、そうだとしたら、どの道現状の私には貴方が理解できる説明はできないように感じてきております。
100 だから 84% が無反応になります。100 - 8 - 7 - 1 = 84 です。
※質問文を読んで、よくわからなかった部分、想像した内容を具体的に教えていただけますと、より適切な質問文の作成に繋がるかもしれません。
書き方を変えると、8 未満は 0 から 7 までの 8 つ、8 以上 15 未満は 8 から 14 までの 7 つ、15 以上 16 未満は 15 のみの 1 つ、それ以外は 16 から 99 までの 84 です。
> ※質問文を読んで、よくわからなかった部分、想像した内容を具体的に教えていただけますと、より適切な質問文の作成に繋がるかもしれません。
あなたの思う「正しい動作」が書いていないのでわかりません。
一つ前の投稿は返信確認前に投稿しました。具体例のご説明ありがとうございます。仰っている内容は理解しております。
ご回答ありがとうございます。質問修正時の参考にさせていただきます。
人をからかって遊んでるのかな?
「実際に使っているコード」をそのまま載せてください。
提示されているコードは(全角のMが混ざっていることからも推測されるように)実際に使っているものではなく、質問者が述べている現象は確認できません。
遊んでいるのでないとしたら、今のところどの回答者にも伝わっていないようなので、本気を出して説明してください。本気を出してそれが限界なら、融通のきかないコンピューターに逐一説明する行為であるプログラミングはあなたには厳しいですね。
説明に関しては、私自身も先に書いている通りなのでこれ以上のコメントは控えます。後者に関しては、本題から逸れる内容の為返答しません。
実際に使っているコードのコピペも出来ないレベルだと言うことなのでしょうか?
回答4件
あなたの回答
tips
プレビュー