Оцените математические операторы из строки для использования со случайным числом - PullRequest
0 голосов
/ 31 октября 2018

У меня есть математическая викторина, где числа рандомизированы и операторы тоже, но чтобы сделать операторы случайными, мне пришлось поместить их в строку и использовать Math.random, который, тем не менее, работает, когда я пытаюсь вычислить заданные мной вопросы. не знаете, как оценивать математические операторы.

var operationArray = ['x','&#247','+','-'];
var randomOperation1 = Math.floor(Math.random()*operationArray.length);
var randomOperation2 = Math.floor(Math.random()*operationArray.length);


  var randomNumber1 = Math.floor(Math.random() * 6) + 5;
  var randomNumber2 = Math.floor(Math.random() * 8) + 10;
  var randomNumber3 = Math.floor(Math.random() * 40 + 1);
  _questionText = document.getElementById("question").innerHTML = randomNumber1 + " " + operationArray[randomOperation1] + " " + randomNumber2 + " " + operationArray[randomOperation2] + " " + randomNumber3;

_decimalAnswer = randomNumber1 + randomNumber2 + randomNumber3;
  _answer = Math.round(_decimalAnswer);

После исследования я наткнулся на eval (), но не смог понять, как это будет работать, когда числа имеют случайные значения, а операторы являются строками.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Если я вас правильно понял, обычно вы хотите этого:

var data = [1, "+", 2];
var result = yourFunction(data);
console.log(result);//3

Для этого вам понадобится написать синтаксический анализатор, который будет работать с вашим массивом и выполнять действия. Примерно так:

var result = 0;
for(var i = 0; i < data.length; i++) {
  switch(data[i]){
    case '+':
      result += data[i + 1];
      i++;
      break;
    default:
      result = data[i];
  }
}

Если вам нужно более сложное решение, см. этот дерьмовый код

0 голосов
/ 31 октября 2018

Хотя я бы не рекомендовал использовать eval (зло) вообще. Это может быть необходимо в этом случае.

var operationArray = ['x','&#247','+','-'];
var randomOperation1 = Math.floor(Math.random()*operationArray.length);
var randomOperation2 = Math.floor(Math.random()*operationArray.length);

var randomNumber1 = Math.floor(Math.random() * 6) + 5;
var randomNumber2 = Math.floor(Math.random() * 8) + 10;
var randomNumber3 = Math.floor(Math.random() * 40 + 1);
_questionText = document.getElementById("question").innerHTML = randomNumber1 + " " + operationArray[randomOperation1] + " " + randomNumber2 + " " + operationArray[randomOperation2] + " " + randomNumber3;

Заменить операторов фактическими операторами, используемыми кодом

_questionText = _questionText.replace(/&#247/g, '/').replace(/x/g, '*');

Оценить строку.

_decimalAnswer = eval(_questionText);
_answer = Math.round(_decimalAnswer);
...