Как рассчитать простое уравнение через несколько функций?(DOM), - PullRequest
0 голосов
/ 20 января 2019

Привет, ребята, я делаю этот маленький проект, где мне нужно случайным образом сгенерировать 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 голосов
/ 20 января 2019
  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];
           }
0 голосов
/ 20 января 2019

Метод generateRandomOperatorAndCorrectResult никогда не вызывает метод.

var correctResult = (operators[selectedOperator].method); назначает функцию метода переменной correctResult. В JavaScript функции являются объектными. Таким образом, correctResult является объектом типа function. И вам нужно вызывать функцию после присвоения переменной в этой строке.

Вы можете сделать correctResult(rnum1, rnum2) или operators[selectedOperator].method(rnum1, rnum2) Однако у вас нет доступа к rnum1 и rnum2 в вышеупомянутом вызове. Для этого вы можете сделать rnum1, rnum2 глобальными переменными. (Хотя я этого не предлагаю). Вы можете передать rnum1 и rnum2 в качестве аргументов generateRandomOperatorAndCorrectResult То же самое касается массива results в функции. Вы тоже можете это передать. Они будут переданы как ссылки, так как массивы передаются по ссылке в JavaScript, поэтому все, что вы делаете в функции, будет отражено за пределами локальной области видимости.

Я также не вижу результатов, созданных нигде, кроме как внутри метода generateRandomOperatorAndCorrectResult. Если вы создали его в другом месте как глобальную переменную, он может существовать. Но из предоставленного кода переменная результатов внутри каждого из методов кажется отключенной.

0 голосов
/ 20 января 2019

Я думаю, вам нужно передать некоторые аргументы, подобные этому .method (5,2) .. .method (rnum1, rnum2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...