Java RPN后缀计算器输出不符合简单算术的预期

Java RPN后缀计算器输出不符合简单算术的预期,java,calculator,rpn,Java,Calculator,Rpn,我已经编写了一个类来对基本算术运算符进行后期修复计算-代码如下 public class PostFixCalculatorRPN { public static void main() { String input = JOptionPane.showInputDialog("PostFix expression: "); Stack s = new Stack(); for (int i = 0; i < input.l

我已经编写了一个类来对基本算术运算符进行后期修复计算-代码如下

public class PostFixCalculatorRPN
{
    public static void main()
    {
        String input = JOptionPane.showInputDialog("PostFix expression: ");
        Stack s = new Stack();

        for (int i = 0; i < input.length(); i++)
        {
            char ch = input.charAt(i);
            if (ch == '+' || ch == '-' || ch == '*' || ch == '/')
            {
                // pop 2 numbers off and operate
                switch (ch)
                {
                case '+':// push the sum of the 2 numbers back on stack
                case '-': // push the difference of the 2 numbers back on stack
                case '*': // push the product of the 2 numbers back on stack    
                case '/':// push the quotient of the 2 numbers back on stack
                }
            } else
                s.push(ch + "");
        }
        int answer = Integer.parseInt((String) s.pop());

        System.out.println(printInput(input) + ": Evaluates to -> " + answer);
        System.exit(0);
    }

    public static String printInput(String s)
    {
        String str = "";

        for (int i = 0; i < s.length(); i++)
            str += s.charAt(i);

        return str;
    }
}
公共类PostFixCalculatorRPN
{
公共静态void main()
{
字符串输入=JOptionPane.showInputDialog(“后缀表达式:”);
堆栈s=新堆栈();
对于(int i=0;i”+答案);
系统出口(0);
}
公共静态字符串打印输入(字符串s)
{
字符串str=“”;
对于(int i=0;i
我相信我使用的
堆栈
类可以正确工作,但如果需要,我也可以发布


我的计算器的输出不符合预期,例如,
53+
的输入计算结果为
3
92*
计算结果为
2
,而我期望的是分别为
8
18

您拥有的一切都非常接近,但在case语句中没有代码,它只会返回输入字符串中的最后一个非运算符(推到堆栈上的最后一项)。您是否完全理解您拥有的代码以及堆栈是什么?在输入中从左向右单步执行,将数字压入堆栈,直到碰到运算符(+-*/),然后将运算符应用于方便压入堆栈的数字。这些数字的弹出顺序与您按下它们的顺序相反。您应该只需要从堆栈中弹出两个数字,然后执行所需的操作并推送结果。类似(重用代码中已有的片段):


由于订购持久性有机污染物,其中一家运营商将稍微棘手一些。仔细想想。

“输出不正确”您能给出当前应用程序输入/输出配对的至少一个示例吗?是的,例如“53+”计算为3。“92*”的计算结果为2。对于RPN,我不确定“53+”的计算结果应该是什么。您有一个数字(53)和需要两个数字的运算符(+)。我的意思是“53+”应该评估为8。空间不是很重要吗?当我像你说的那样添加一个空间时,我得到了一个数字格式异常错误啊,所以在我能看到的行之间读一点,我猜你只是一次读一个字符,并假设所有内容都是一位数字。所以没有空间。听起来对吗?好的,那么在case语句中我不需要两个变量来操作吗?我理解栈是如何工作的,但我对java语法很陌生。你的编辑要添加图片,你可能会考虑在评论中添加一个链接。我来这里是想了解一下关于审查编辑内容的上下文问题,并对你的帖子格式做了一些调整——如果帖子看起来不错的话,你会有更多的人浏览,尽管我认为@MarkBalhoff在这方面对你有帮助。对。您可以将数字存储在变量中,但这对于加法case语句不是必需的,@MikeG图像中的代码很接近,但减法和除法是错误的。此外,为了与字符串堆栈保持一致,您可能需要
+”
,就像您在代码后面所做的那样。您仍然收到任何错误吗?是的,我收到“int operan1=s.pop();”的不兼容类型错误
s.push(Integer.parseInt((String)s.pop()) + Integer.parseInt((String)s.pop()) + "");