元素未添加到字符串列表中

时间:2020-02-27 08:21:15

标签: list flutter dart

我一直在努力建立一个扑朔迷离的计算器。这是我编写的表达式求值器函数。

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 :(得分:0)

您可以查看软件包的表达式,我认为它可以为您的需求提供帮助。您可以使用此包评估任何表达式字符串

Expressions Package