java - 在 Java 中评估后缀表达式

标签 java

我有一个问题,我找不到这个函数中的错误,它有时对某些输入很好,但有时却没有,例如这个输入“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/

相关文章:

java - 如何在 java 中使用 JRSwapFileVirtualizer 进行碧 Jade 报告

java - 在新 Activity 中查看和下载壁纸时遇到问题

Java 在 BufferedReader.read for char 之后抛出 NumberFormatException 错误

java - 如何从 Osmdroid map 上删除标记

android - 当不存在时 Eclipse 给出错误(Snow Leopard 和 Android)

java - Java 中 <Array Name>.length 的时间复杂度或隐藏成本

java - 扩展其他功能的接口(interface)不能 - 不能为它分配构造函数引用 - 它是编译器错误吗?

java - 在 Eclipse RCP 中实现水平行编号

java - 使用 ProcessBuilder 运行 msys.bat

java - "Ping Connection Pool failed for MySQL. Communications link failure due to underlying exception" Glassfish 4