首页 > 解决方案 > 如何正确编写 evaluatePostfix 函数?

问题描述

我是编码新手。试图用 Java 编写一个 evaluatePostfix 函数。我不断收到错误消息:

不兼容的类型:int 不能转换为 Character stack.push(eval(token, a, b));

这是用于将中缀符号转换为后缀的学校作业。

以下是我的代码块:

private static int evalPostfix(String postfix){
            char token = ' ';
    int a;
    int b;
    Queue<Character> postfixQ = new Queue<>();
    for (char i : postfix.toCharArray()) {
        postfixQ.enqueue(i);
    }
    Stack<Character> stack = new Stack<>();
    while (!postfixQ.isEmpty()){
        token = postfixQ.dequeue();
        if (isOperand(token)){
            stack.push(token);
        }
        else {
            a = stack.pop();
            b = stack.pop();
            stack.push(eval(token, a, b));
        }
    }
    if(!stack.isEmpty()){
        return stack.pop();
    }
    else {
        System.out.println("Invalid postfix expression");
    }
}

函数接受后缀表达式并计算结果。

这是我的评估功能:

private static int eval(char op, int a, int b){
    int result = -1;
    if (op == '+'){
        return a + b;
    }
    else if (op == '-'){
        return a - b;
    }
    else if (op == '*'){
        return a * b;
    }
    else if (op == '/'){
        return a / b;
    }
    else if (op == '^')
        return (int)Math.pow(a, b);
    return result;
}

标签: javapostfix-notationincompatibletypeerror

解决方案


问题是该方法eval返回一个int,而您尝试将结果推送到一个Stack<Character>.

我不完全确定您在这里尝试做什么,但这无法编译,因为int无法直接转换为Character.

您可以通过插入显式转换来解决编译问题char

stack.push((char)eval(token, a, b));

但这会将 的结果转换为eval范围内的值char,这可能不是您想要对很容易超出[0..65535] 范围的值执行的char操作。


推荐阅读