Javascript代码运行良好...几乎所有时间

时间:2015-10-17 16:44:10

标签: javascript

我遇到了一个似乎无法解决的问题。请看下面的代码:

<script>
    function createFunctions() {
        var first = ["", "", ""];
        var second = ["", "", ""];
        var func = ["", ""];
        var sign = ["", ""];
        for (i = 0; i < 3; i++) {
            first[i] = (Math.round(Math.random() * 9) + 1);
            second[i] = (Math.round(Math.random() * 9) + 1);
            sign[i] = (Math.round(Math.random()));
            if (sign[i] == "1") {
                sign[i] = '+';
            } else {
                sign[i] = '-';
            }
            if (first < 2) {
                func[i] = 'f(x) = x ' + sign[i] + ' ' + second[i] + '<p>';
            } else {
                func[i] = 'f(x) = ' + first[i] + 'x ' + sign[i] + ' ' + second[i] + '<br>';
            }
        }
        for (i = 0; i < 3; i++) {
            document.getElementById("createFunctions").innerHTML += 'Function ' + [i + 1] + ': ' + func[i];
        }
        //whichFunction=
        findAnswers(first, second, sign);
    }

    function findAnswers(first, second, sign, rand) {
        var num = ["", "", ""];
        rand = (Math.round(Math.random() * 1));
        document.getElementById("findAnswers").innerHTML = 'Which <b>one (or more)</b> of these functions holds true, when plugged in with the following <b>values of x</b>? (' + [rand + 1] + ')<br>';
        for (i = 0; i < 3; i++) {
            num[i] = (Math.round(Math.random() * 9));
        }
        for (i = 0; i < 3; i++) {
            ans = 0;
            if (sign[rand] == "+") {
                ans = [first[rand] * num[i]] + second[rand];
            } else {
                ans = [first[rand] * num[i]] - second[rand];
            }
            document.getElementById("findAnswers").innerHTML += [i + 1] + '. You put in a ' + num[i] + ': ' + ans + '<br>';
        }
    }
</script>

<BODY onload=createFunctions()>
    <b>A Machine Called Effex</b>
    <p><input type="button" value="New Examples" onclick="history.go(0)" VALUE="Refresh"></p>
    <p id="createFunctions"></p>
    <p id="findAnswers"></p>

一切都很好。除了偶尔,在计算函数时,代码乘以x,然后简单地将第二个值连接到第一个,而不是添加(或减去)。

1 个答案:

答案 0 :(得分:3)

您应该将[first[rand]*num[i]]更改为(first[rand]*num[i])。 []括号实例化一个只有一个值(乘法的乘积)的数组,然后你就可以添加&#39;将数组转换为数字,强制引擎将数组转换为字符串,并将字符串与您添加的数字连接起来。

为了说明,请考虑以下代码。它还实例化一个数组,但使用unary + operator将其强制转换为数字。这将导致数值而不是数组,因此您的代码将按预期工作。

+[first[rand]*num[i]]

为了进一步说明发生了什么,请考虑以下代码。它也实例化一个单元素数组,但是通过用[0]附加它,我们指定该元素的(数值)值,因此当你使用+运算符时,引擎不会强制将数组转换为字符串。

[first[rand]*num[i]][0]