First, I believe you mean postOperators
, as opposed to postOperands
.
An operand is the value.
您可以创建一个for循环来迭代数字的List
,并将它们编译成result
.
此外,您应该判断Abstract Syntax Tree的 struct .
/** @param postNumbers must be mutable */
double evaluate(List<String> postNumbers, List<String> postOperators) {
double result = Double.parseDouble(postNumbers.remove(0));
double value;
char operator;
for (int index = 0; index < postNumbers.size(); index++) {
value = Double.parseDouble(postNumbers.get(index));
operator = postOperators.get(index).charAt(0);
result = switch (operator) {
case '*' -> result * value;
case '/' -> result / value;
case '+' -> result + value;
case '-' -> result - value;
default -> throw new IllegalArgumentException();
};
}
return result;
}
示例输入
List<String> postNumbers = new ArrayList<>(Arrays.asList("10", "5", "3", "2"));
List<String> postOperators = List.of("+", "*", "-");
double result = evaluate(postNumbers, postOperators);
输出
43.0