java - 如何正确编写evaluatePostfix函数?

标签 java postfix-notation incompatibletypeerror

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

incompatible types: int cannot be converted to 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;
}

最佳答案

问题在于方法 eval返回 int ,然后您尝试将结果插入 Stack<Character> .

我不完全确定你想在这里做什么,但这不会编译,因为 int不能直接转换为Character .

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

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

但这会转换 eval 的结果为 char 范围内的值,对于很容易超出 [0..65535] range of char 的值,这可能不是您想要做的.

关于java - 如何正确编写evaluatePostfix函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54249038/

相关文章:

java - "aapt"IOException 错误=2,没有这样的文件或目录 "why can' t 我在 Jenkins 上构建我的 gradle?

java - 通过 JNI 在 C 和 Java 之间传递指针

java - 将 char 转换为 int java 时出现问题

java - ArrayList.get(i) 的不兼容类型错误;

java - 在另一个类中传递方法时类型不兼容

android - 不兼容类型 : cannot cast viewholder to imageviewholder

java - 初始化静态变量时使用局部变量

java - 将依赖项注入(inject)到 Singleton 类中

c - 后缀计算器不起作用,为什么? - C

c++ - 在 C++ 中使用堆栈(链表)将中缀转换为后缀