synya
@synya

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Javascriptなどで、ランダムな数値を固定して複数箇所で使い回したい

ランダムな数値を組み込み関数で生成し、それを各所で使いまわそうとすると、
各所で異なる数字が出てしまいます。これを固定する方法が知りたいです。

通信を介さず端末のみで、自動更新ができるようJavascriptを使用しています。
自動更新で問題が変わるひき算です。

constやletで代入すれば良いのですが、それだとsetIntervalでランダムの関数を動かした際も固定されてしまい、数値が変わらなくなってしまいます。

該当するソースコード

Javascript

            <script>
                'use strict';

                function $b1(b1) {
                    return b1 = Math.floor(Math.random() * 9) +1;
                };
                function $a1(a1) {
                    return a1 = Math.floor(Math.random() * 9) +1 + $b1();
                };
                // count 1
                document.getElementById('sub1').textContent = $a1() + ' - ' + $b1() + ' =';
                // count 2 <=
                const sub1 = function(){
                    document.getElementById('sub1').textContent = $a1() + ' - ' + $b1() + ' =';
                };
                setInterval(sub1,5000);
            </script>

問題は$b1()で、これが$a1()より大きくなると負の数になるので、$a1() > $b1() の関係にしたいのですが(上記の通り、$a1()に$b1()を足します)、$b1()は、①Sub1を書き換える数字、②$a1()に+される数値が異なるようです。
ちなみにconsoleにも出して、実際に計算させましたが、$b1()も$a1()もバラバラの数字が生成されるので全く関係がない解になります。

上述したように通信しない、更新しないで$b1()と$a1()の数字を各所で使いまわせるようにするには、どうするとよいか、お知恵をお借りできないでしょうか。

0

1Answer

正直おっしゃっていることの半分くらいしか理解していませんが、
やりたいのはこういうことでしょうか?

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function refreshQuestion() {
    const b = getRandomInt(1, 9);
    const a = getRandomInt(b + 1, b + 9);
    const question = `${a} - ${b} = ?`;
    document.getElementById('sub1').textContent = question;
    console.log(`answer = ${a - b}`);
}

setInterval(refreshQuestion, 5000);
1Like

Comments

  1. @synya

    Questioner

    eudika様
    ご親切にご回答をいただき、誠にありがとうございます。おっしゃっているコードで正常に動作しました。
    このコードを元に、Math.randomの使い方を改めて調べ直しました。
    さらに今回、問題だったのは、数式を一つのfunctionにまとめなかったことと、setInterval内でfunctionではなくhtmlタグを指定してしまっていたことでした。そのせいで一度定数にしてしまったものがリフレッシュされなくなる現象が発生してしまっておりました。
    この度は誠にありがとうございました。

Your answer might help someone💌