当前位置: 首页 > 知识库问答 >
问题:

如何正确编写evaluatePostfix函数?

郭元明
2023-03-14

我对编码很陌生。尝试用Java编写一个evaluatePostfix函数。我不断得到一个错误:

不兼容的类型:int不能转换为字符堆栈。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");
    }
}

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

这是我的eval函数:

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;
}

共有1个答案

钱远
2023-03-14

问题是方法eval返回一个int,您试图将结果推送到堆栈 上。

我不完全确定您在这里要做什么,但这不能编译,因为int不能直接转换为character

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

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

但这会将eval的结果转换为char范围内的值,而对于很容易超出char[0.65535]范围的值,这是有问题的。

 类似资料:
  • 问题内容: 您如何用Java编写(并运行)正确的微基准测试? 我正在寻找一些代码示例和注释,以说明要考虑的各种问题。 示例:基准测试应该测量时间/迭代或迭代/时间,为什么? 问题答案: 有关从Java HotSpot的创建者编写微基准测试的提示: 规则0:阅读有关JVM和微基准测试的著名论文。好的人是布莱恩·格茨(Brian Goetz),2005年。不要对微观基准期望太高;它们仅测量有限范围的J

  • 问题的核心归结为文档,但可能是我没有正确理解其中的一个或多个方面。如果有,请告诉我:-) 假设我的API中有一个或多或少通用的链接关系()来链接相关的帐户。确切的意思会随着上下文而改变,对吧? 在我的公告牌(或索引)上,我可能有一个与该关系的链接来浏览所有帐户。 在另一个资源(例如帐户组)上,它可能只链接到属于该组的帐户的特定子集。 这种关系本身似乎不是正确的地方。尤其是当您考虑到该URL的有效负

  • 大家好,我希望这个程序能够对大写字母进行编码,而不使用其他字符,并通过输出传递它们。例如“你好,世界!”运行程序“URYY\d_YQ!”后应变为我得到的是Yluhreylbowjwboerylqdxk而不是“URYY\dyq!”这就是我应该得到的。如果有人能让我知道我做错了什么,我将不胜感激。提前谢谢。

  • 问题内容: 我在Kotlin中编写了一个小测试,以使用带有算法“ AES / CFB8 / NoPadding”的Cipher实例加密一些文本“ Hello”。(Minecraft的东西) 我现在正尝试在Go中执行相同的操作,但是我无法产生相同的结果。我尝试过的所有不同方法都会产生不同的结果。 这些是我已经浏览过的以下线程/示例,以达到这一点。 如何在Golang中使用RSA密钥对进行AES加密和

  • 问题内容: 我的软件包具有以下结构: 我不确定应如何正确写入文件。 的样子: 但是例如应该看起来如何?我的是: 什么时候应该使用? 问题答案: 很好-它有助于指导导入语句,而无需自动导入模块 http://docs.python.org/tutorial/modules.html#importing-from-a- package 使用和是多余的,仅需要 我认为在导入软件包中使用的最强大的理由之一

  • 我正在尝试使用JSoup获取此URL http://betatruebaonline.com/img/parte/330/ciguen%c3%91al.jpg 相反,正确的 http://betatruebaonline.com/img/parte/330/ciguen%cc%83al.jpg 我该怎么解决这个?多谢了。