2

生徒用に動的なワークシートを作成したいので、毎回異なる質問が表示されます。私が作成しようとしている質問、つまり、合計 Y のうち X を獲得した場合のパーセンテージを計算します。

一緒に動作する 3 つの関数を次に示します。最初の関数はいくつかの数値を生成し、2 番目の関数を呼び出し、次に 3 番目の関数を呼び出して小数点以下 2 桁を超えているかどうかを確認します。小数点以下2桁以内の答えを見つけて、最初に有効なSCORE番号を返し、それを出力します。

私は3つの出力のうちの1つを取得し続けます.SCOREがあるべき場所が未定義である、出力がまったくない、または実用的な質問です.

時々それがどのように機能するか理解できず、時々 undefined をスローし、他の時にはまったく何も与えません。

何か案は。

function scorePercent()
{
    var output="";
    var total = Math.floor((Math.random()*99)+1);
var score = Math.floor((Math.random()*(total-1))+1);
    output = output + "<div>A score of " + chkScore(score,total) + " out of " + total + ".</div></br>";

    document.getElementById("qOut").innerHTML=output;

}

function chkScore(n1,n2)
{
    var answ = (n1/n2)*100;
    if(dps(answ)>2)
    {
        var scoreNew = Math.floor((Math.random()*(n2-1))+1);
        chkScore(scoreNew, n2);
    }
    else
    {
        return n1;
    }       
}

function dps(num) 
{
    var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
    if (!match) { return 0; }
    return Math.max(
            0,
        // Number of digits right of decimal point.
            (match[1] ? match[1].length : 0)
        // Adjust for scientific notation.
         - (match[2] ? +match[2] : 0));
}
4

1 に答える 1

3

に再帰関数がありますが、「より深い」反復からの結果を取得して chkScoreいません。return

これを試して:

function chkScore(n1,n2){
    var answ = (n1/n2)*100;
    if(dps(answ)>2) {
        var scoreNew = Math.floor((Math.random()*(n2-1))+1);
        return chkScore(scoreNew, n2); // <-- return that.
    } else {
        return n1;
    }       
}

そこに欠落returnしていると、関数が何も返さないことがありました。

「より深い」反復では、値が1「レベル」上にのみ返されるため、私が何を意味するかを知っている場合は、「レベル」がそれを通過する必要があります。

于 2012-12-18T10:49:19.900 に答える