我一直在努力建立一个扑朔迷离的计算器。这是我编写的表达式求值器函数。
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
关于如何解决此问题的任何建议?这是我关于堆栈溢出的第一个问题,所以请问我是否需要其他必要的详细信息。