求解数组 Javascript 中的随机数和随机变量

Solving random numbers and random variables from array Javascript

window.onload = start;
var nr1 = Math.floor(Math.random()*50);
var nr2 = Math.floor(Math.random()*50);
var eq1 = nr1 +"+"+nr2;
var eq2 = nr1 + "-"+ nr2;
var eq3 = nr1 +"*"+ nr2;
var eq4 = nr1 +"/"+ nr2;

var arr = [eq1,eq2,eq3,eq4];
var eq = arr[Math.floor(Math.random()*arr.length),Math.floor(Math.random()*arr.length)];

我想练习一些东西,制作一个基本的数学游戏。上面是我试图用来生成随机数和随机方程的代码,我想从我的 html 中得出这些代码。我之所以给运算符加上“”是因为我希望整个方程式以文本形式出现,我试过没有“”标记,我直接得到了答案。

function start() {
document.getElementById("submit").onclick = submitans;
document.getElementById("question").innerHTML = eq;
}

这是我生成方程式的启动函数。现在这在 html 中非常有效,如果你看这张照片 -- HTML。我的问题是,我不知道如何将方程连接到输入框中的 "if(statement)"。因为脚本将命令读取为文本,所以即使我写

它也不起作用
   function submitans() {

    var correct = "Correct!";
    var wrong = "Wrong";      
    var inn = parseInt(document.getElementById("answer").value);

    for (var i = 0; i < eq.length; i++) {
       if(inn === eq[i])
        document.getElementById("input").innerHTML = "correct";
     }
  }

我是否可以通过这个脚本达到我想要的目标?我坚持使用纯 javascript,因为我只是一个初学者,我真的很想学习它。所以我宁愿不使用 jquery.

除此之外,我打算让我的脚本显示每个正确答案的分数,我想目标是最多有 10 个正确答案,并且允许用户有 5 个错误。

我会改变你管理方程式的方式...也许类似的东西可能有用:

function eq(x, y, op){
    // Find the result depending on the operation
    var res;
    switch (op){
        case: '+':
            res = x + y;
            break;
        case: '-':
            res = x - y;
            break;
        case: '*':
            res = x * y;
            break;
        case: '/':
            res = x / y;
            break;
        default:
            throw "Error";
    }
    // Or something like is more compact
    var res2 = op == '+' ? x+y : op == '-' ? x-y : op == '*' ? x*y : op == '/' ? x/y : null;

    return {
        text: x + op + y,
        res: res
    }
}

// ...
var eq1 = eq(nr1, nr2, '+');
var eq2 = eq(nr1, nr2, '-');
var eq3 = eq(nr1, nr2, '*');
var eq4 = eq(nr1, nr2, '/');

然后你只需要在 HTML 中显示 eq.text 并检查 eq.res 以与答案进行比较...也许你可以做一些更好的事情但它应该有效

您也可以使用 eval 函数来获取答案。 var answer = eval(document.getElementById("question").innerHTML) 得到正确答案

在第一段代码中,您可以为每个方程添加答案

var eq1 = nr1 +"+"+nr2;
var eq2 = nr1 + "-"+ nr2;
var eq3 = nr1 +"*"+ nr2;
var eq4 = nr1 +"/"+ nr2;
//answers
var ans1 = nr1 +"+"+nr2;
var ans2 = nr1 + "-"+ nr2;
var ans3 = nr1 +"*"+ nr2;
var ans4 = nr1 +"/"+ nr2;

然后当你得到随机方程时你也得到了它的答案

var arr = [eq1,eq2,eq3,eq4];
var ansArr = [ans1, ans2, ans3, ans4];
var eqNumber = Math.floor(Math.random()*arr.length);
var eq = arr[eqNumber];
var ans = ansArr[eqNumber];

并像这样编辑最后一个片段

function submitans() {
    var correct = "Correct!";
    var wrong = "Wrong";      
    var inn = parseInt(document.getElementById("answer").value);

    //for (var i = 0; i < eq.length; i++) {//delete
       if(inn == ans)
        document.getElementById("input").innerHTML = correct;
       else
        document.getElementById("input").innerHTML = wrong;
    //}//delete
 }

-------------------------------------------- ----------------------------------

或者您也可以像这样只更改最后一段代码,而不是全部更改

function submitans() {
    var correct = "Correct!";
    var wrong = "Wrong";      
    var inn = parseInt(document.getElementById("answer").value);

    //for (var i = 0; i < eq.length; i++) {//delete
       if(inn == eval(eq))
        document.getElementById("input").innerHTML = correct;
       else
        document.getElementById("input").innerHTML = wrong;
    //}//delete
 }

eval 将 运行 文本作为 javascript 并且它将 return 方程式的答案。

eval() 应该很好用,试试这个:

function submitans() {
    var correct = "Correct!";
    var wrong = "Wrong";      
    var inn = parseInt(document.getElementById("answer").value);

    if(inn === eval(document.getElementById("question").innerHTML))
        document.getElementById("input").innerHTML = correct;
    else 
        document.getElementById("input").innerHTML = wrong;     
}

parseInt 和 Number 有区别

var inn = parseInt(document.getElementById("answer").value);
var inn = Number(document.getElementById("input").value);

==========================

eval() 你需要小心。更重要的是 javascript 将如何解释给定的

字符串
var ans1 = eval( 4-3/2*39+3)

添加括号将确保您得到正确的结果,得到您希望 evel() 到 return 的答案。

var ans2 = eval( (4-((3/2)*39))+3 );

var ans3 = eval(document.getElementById("equation").value);

很可能会return喜欢ans1,小心!

解决上述问题...

var eq1a = nr1 +"+"+nr2;
var eq1b = nr1 + nr2
var eq2a = nr1 + "-"+ nr2; 
var eq2b = nr1 - nr2
var eq3a = nr1 +"*"+ nr2;
var eq3b = nr1 * nr2
var eq4a = nr1 +"/"+ nr2;
var eq4b = nr1 / nr2

以上很简单......

下一步

var eq1 = "nr1 + nr2"
var eq2 = "nr1 - nr2"
var eq3 = "nr1 * nr2"
var eq4 = "nr1 / nr2"

以上是你可以做的字符串...

var nr1 = Math.floor(Math.random()*50);
var nr2 = Math.floor(Math.random()*50);
var eq1 = "nr1 + nr2"
document.getElementById("equation").innerHTML = eq1;
//and it will show correctly.
var ans = eval(eq1); 
// and it will give you the answer

并更进一步....

var eq1 = "((nr1 + nr2) * 4 / 4)"
document.getElementById("equation").innerHTML = eq1.regex();
var ans = eval(eq1);

我忘记了需要将什么放在 regex() 括号中以删除 ( 和 ) 括号。所以它不会将它们打印到等式 html 元素。

====================

如果应用程序是关键应用程序,请小心使用 eval()。您的应用程序可能会很快被黑。