我有一个问题,我找不到这个函数中的错误,它有时对某些输入很好,但有时却没有,例如这个输入“6 2/3 – 4 2 * +”任何人都可以提供帮助。
public static double Evaluating_postfix_expressions(String postfix) throws Exception{
StringTokenizer st = new StringTokenizer(postfix);
int numOF_tokens = st.countTokens();
for (int i = 1; i <= numOF_tokens; i++) {
Object term = st.nextToken();
try { // if it is an operand there is no problem
float x = Float.parseFloat((String)term);
stack.push(x);
} catch (Exception e) { // it is an operator
float v1 = (float) stack.pop();
float v2 = (float) stack.pop();
switch ((String) term) {
case "+":
stack.push(v2 + v1);
break;
case "-":
stack.push(v2 - v1);
break;
case "*":
stack.push(v2 * v1);
break;
case "/":
stack.push(v2 / v1);
break;
}
}
}
return (float) stack.pop();
}
最佳答案
请注意,您输入的运算符不正确:
6 2 / 3 – 4 2 * +
请注意此处与手写版本的区别:
6 2 / 3 - 4 2 * +
您使用了破折号而不是连字符——或者相反:
$ echo -n – | xxd
0000000: e280 93 ...
$ echo -n - | xxd
0000000: 2d -
$
这是不报告任何问题的包罗万象的异常问题的一部分。您应该修改您的 switch
以报告无效的运算符,这将使捕获这个运算符变得更加容易。 (我只是碰巧觉得它看起来很有趣。)
关于java - 在 Java 中评估后缀表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10424091/