繁体   English   中英

Java Postfix计算器错误

[英]Java Postfix Calculator Error

我正在使用堆栈在Java中创建后缀计算器。 我已经写了主要部分,但是我遇到了一些问题。 首先,我必须考虑空格,但我不确定如何在当前设置下做到这一点。 我不确定这是否可以完全解决该程序,但这只是一个开始。 任何帮助将不胜感激。

 import java.util.Scanner;
 import java.util.Stack;
 public class Postfix 
{
public static void main(String[]args)
{
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a Postfix expression");
    String input = sc.nextLine();
    Stack<Integer> Pstack = new Stack<Integer>();
    int result = 0;
    for(int i=0; i<input.length();i++)
    {
        char ch = input.charAt(i);

        if(ch>='0' && ch<='9')
        {
            Pstack.push((int)(ch-'0'));
        }
        else
        {
            int o1 = Pstack.pop();
            int o2 = Pstack.pop();

            switch(ch)
            {
            case '+':result=o1+o2;
            break;
            case '-':result=o1-o2;
            break;
            case '/':result=o1/o2;
            break;
            case '*':result=o1*o2;
            }
        }
        Pstack.push(result);
    }
    result = Pstack.pop();
    System.out.println("result: "+ result);
   }
}

如评论中所述,

if(ch == ' ') continue; 

之后

char ch = input.charAt(i);

这将解决空白问题。

另一个问题是

Pstack.push(result);

每次都执行,而不仅仅是在评估操作员的情况下。

因此,该语句应该是“其他”情况下的最后一个语句。

您还必须更正从堆栈弹出参数的方式。

例如,如果您有后缀表达式12-(其结果应为-1),则2位于堆栈顶部,而1位于其后。 在当前解决方案中,由于以错误的顺序检索参数,结果将为2 -1。

所以

int o1 = Pstack.pop();
int o2 = Pstack.pop();

应该改正为

int o2 = Pstack.pop();
int o1 = Pstack.pop();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM