如何通过几个函数计算一个简单的方程式? (DOM)

时间:2019-01-20 15:37:25

标签: javascript dom

伙计们,我正在做这个小项目,我必须在其中随机生成2个数字和运算符。然后,我必须将该方程的结果存储在具有3个随机生成的数字的数组中。然后,所有这些结果将显示在按钮上,用户可以通过单击正确的答案进行选择。

我已经到了代码可以生成数字和运算符的地步,但是我得到正确结果并生成其他随机三个结果的代码似乎不起作用。有谁知道如何解决?预先谢谢你!

<div id="count">
            <div id="text">                  
            </div>
</div>


<script>

        window.addEventListener('load', function() {

            var rnum1 = generateRandomNumber1 ();
            var rnum2 = generateRandomNumber2 ();
            var randomOperator = generateRandomOperatorAndCorrectResult ();




    document.querySelector("#text").textContent = "How much is " + rnum1  + randomOperator  +  rnum2 + "?"; 
    });


       function generateRandomOperatorAndCorrectResult () {
            var operators = [{
                sign: "+",
                method: function(rnum1,rnum2){ return rnum1 + rnum2; } },
                {
                 sign: "*",
                 method: function(rnum1,rnum2){ return rnum1 * rnum2; } },
                 {
                 sign: "-",
                method: function(rnum1,rnum2){ return rnum1 - rnum2; }
                  }];
            var results = [];

            var selectedOperator = Math.floor(Math.random()*operators.length);
            var randomOperator = operators[selectedOperator].sign;
            var correctResult = (operators[selectedOperator].method); //til this point it works
            results.push(correctResult);
            return randomOperator;
            return results;
               }

        function generateRandomResults () {
            for(var i=0; i < 4; i++) {
                results.push((Math.floor(Math.random() * 400) + 1))}

            return results;

        }   
           function generateRandomNumber1 () {
              var rnum1 = (Math.floor(Math.random() * 20) + 1);
              return rnum1;}


            function generateRandomNumber2 () {
              var rnum2 = (Math.floor(Math.random() * 20) + 1);
              return rnum2;}     

</script>

3 个答案:

答案 0 :(得分:1)

  var rnum1 = generateRandomNumber1 ();
  var rnum2 = generateRandomNumber2 ();
  //pass the random numbers to the function
  var data= generateRandomOperatorAndCorrectResult(rnum1,rnum2);
  //data=["+", [5]]
  var operator=data[0];
  var result= data[1];

。 。

   function generateRandomOperatorAndCorrectResult (num1, num2) {
        var operators = [{
            sign: "+",
            method: function(rnum1,rnum2){ return rnum1 + rnum2; } },
            {
             sign: "*",
             method: function(rnum1,rnum2){ return rnum1 * rnum2; } },
             {
             sign: "-",
            method: function(rnum1,rnum2){ return rnum1 - rnum2; }
              }];
        var results = [];

        var selectedOperator = 
        Math.floor(Math.random()*operators.length);
        var randomOperator = operators[selectedOperator].sign;
        var correctResult = (operators[selectedOperator].method(num1, num2)); //pass the numbers to the methods
        results.push(correctResult);

        //return multiple values
        return [randomOperator,results];
           }

答案 1 :(得分:0)

我认为您需要传递一些类似.method(5,2).. .method(rnum1,rnum2)

的参数

答案 2 :(得分:0)

方法generateRandomOperatorAndCorrectResult从不调用该方法。

var correctResult = (operators[selectedOperator].method);正在将方法函数分配给CorrectResult变量。在JavaScript中,函数是对象。因此,correctResult是类型函数的对象。并且您需要在该行的变量分配之后调用该函数。

您可以执行correctResult(rnum1, rnum2)operators[selectedOperator].method(rnum1, rnum2) 但是,您无法在上述调用中访问rnum1和rnum2。您可以将rnum1,rnum2用作全局变量。 (尽管我不建议这样做)。您可以将rnum1和rnum2作为参数传递给generateRandomOperatorAndCorrectResult 函数中的results数组也是如此。您也可以通过。它们将作为引用传递,就像数组通过JavaScript中的引用传递一样,因此您在函数中所做的任何操作都将反映在本地范围之外。

除了在generateRandomOperatorAndCorrectResult方法内部之外,我也看不到其他任何地方创建的结果。如果您在另一个地方将其创建为全局变量,则它可能存在。但是从提供的代码来看,每个方法中的结果变量似乎都是断开的。