何が原因で、どう解決したら良いのかがわかりません。
JavaScript
1let rand1 = Math.floor( Math.random() * (10 ** num1) - (10 ** (num1 - 1))) + (10 ** (num1 - 1));
これの形を変えると次のようになります。マイナスしている部分はカッコから出しても同じなので出します。
JavaScript
1let rand1 = Math.floor( Math.random() * (10 ** num1))
2 - (10 ** (num1 - 1))
3 + (10 ** (num1 - 1));
後半が打ち消しあってますね。これが原因で、0 以上 10 ** num1 未満の乱数が出ています。次に対策ですが、
1 桁の数は 1 から 9 の 9 個に 0 を含め 10 個
2 桁の数は 10 から 99 の 90 個
3 桁の数は 100 から 999 の 900 個
つまり、1 桁の数は特別ですが、その他の数は 10 ** (num1 - 1) * 9 個あるわけです。
この数を Math.random() にかけましょう。そして最後にゲタをはかせます。
JavaScript
1let rand1 = Math.floor(Math.random() * (10 ** (num1 - 1) * 9)) + 10 ** (num1 - 1);
一桁の数だけは別に計算してください。
JavaScript
1let rand1 = Math.floor(Math.random() * 10);
これらを合わせると以下のようになります。三項条件演算子を使わず式を立てることもできますが、無理なことをするよりもこの方が可読性が高いでしょう。なお、以下の式は、num1 が 1 未満であった場合、1 であるとみなしたものになります。
JavaScript
1let rand1 = num1 > 1
2 ? Math.floor(Math.random() * (10 ** (num1 - 1) * 9)) + 10 ** (num1 - 1)
3 : Math.floor(Math.random() * 10);
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/13 21:25 編集