Я пытался построить калькулятор во флаттере. И это написанная мной функция оценки выражений.
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
Есть предложения, как это исправить? Это мой первый вопрос о переполнении стека, поэтому, пожалуйста, задайте мне другие необходимые детали.