2

我想为我的学生创建一个动态工作表,所以每次他们这样做时都会看到不同的问题。我正在尝试创建的问题是,如果我在 Y 的总分中得分 X,则计算百分比。

这是三个一起工作的函数,第一个生成一些数字,调用第二个,然后调用第三个检查它是否超过 2 个小数位,如果是,第二个创建一个新的 SCORE 数字,重复直到它找到一个小数点后 2 位或更少的答案,然后返回适用于第一个的 SCORE 数字,然后输出它。

我不断得到三个输出之一:未定义 SCORE 应该在哪里,根本没有输出,或者一个工作问题。

我有时无法理解它是如何工作的,有时会抛出未定义的,而在其他时候则完全没有给出任何东西。

有任何想法吗。

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 回答