Элементы не добавляются в список строк - PullRequest
0 голосов
/ 27 февраля 2020

Я пытался построить калькулятор во флаттере. И это написанная мной функция оценки выражений.

class Evaluate {
  int i;
  double val;
  List<String> tokens = new List<String>();
  List<String> ops = new List<String>();
  List<double> values = new List<double>();

  double evaluateExpression(String str) {
    tokens = str.split("");
    stderr.writeln("tokens = $tokens \n 2");

    for (i = 0; i < tokens.length; i++) {
      if (isDigit(tokens[i].codeUnitAt(0))) {
        val = 0;
        while (i < tokens.length && isDigit(tokens[i].codeUnitAt(0))) {
          val = (val * 10) + double.parse(tokens[i]);
          i++;
        }

        values.add(val);

        stderr.writeln("values = $values \n 3");
      } else if (!isDigit(tokens[i].codeUnitAt(0))) {
        while (
            ops.isNotEmpty && precedence(ops.last) >= precedence(tokens[i])) {
          double val2 = values.last;
          values.removeLast();

          double val1 = values.last;
          values.removeLast();

          String op = ops.last;
          ops.removeLast();

          values.add(applyOp(val1, val2, op));
        }

        ops.add(tokens[i]);
        stderr.writeln("ops = $ops \n 4");
      }
    }

    while (ops.isNotEmpty) {
      double val2 = values.last;
      values.removeLast();

      double val1 = values.last;
      values.removeLast();

      String op = ops.last;
      ops.removeLast();

      values.add(applyOp(val1, val2, op));
    }
    return values.last;
  }
}

Элементы типов данных String [такие как '+', '-', '*', '/'] не добавляются в Список операций. Я пытался взять несколько журналов при оценке 2 + 2.

13:33:47.050    stderr  1
13:33:47.059    stderr  tokens = [2, +, 2] 2
13:33:47.063    stderr  values = [2.0] 3
13:33:47.064    stderr  values = [2.0, 2.0] 3
13:33:47.064    stderr  end

Есть предложения, как это исправить? Это мой первый вопрос о переполнении стека, поэтому, пожалуйста, задайте мне другие необходимые детали.

1 Ответ

0 голосов
/ 27 февраля 2020

Вы можете посмотреть на выражения пакета, я думаю, что это может помочь вам. Вы можете оценить любую строку выражения, используя этот пакет

Пакет выражений

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