【问题标题】:Java Postfix Calculator ErrorJava 后缀计算器错误
【发布时间】:2017-01-27 19:43:50
【问题描述】:

我正在使用堆栈在 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);之后。

标签: java stack postfix


【解决方案1】:

如cmets中所述,放

if(ch == ' ') continue; 

紧接着

char ch = input.charAt(i);

这将解决空格问题。

另一个问题是

Pstack.push(result);

每次都会执行,而不仅仅是在对运算符进行评估的情况下。

所以这个语句应该是“else”情况下的最后一个语句。

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

例如如果你有后缀表达式 12- (应该计算为 -1), 2 在堆栈顶部,1 在后面。 在当前解决方案中,结果将是 2 -1,因为以错误的顺序检索参数。

所以

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

应该改成

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

【讨论】:

  • 谢谢!那解决了它。也帮助我更好地理解它。很好的答案!
  • 再次查看我的程序后,我确实还有一个问题。我刚刚意识到我的计算器只适用于 10 以下的数字。例如,1 2 + 有效且等于 3。但是,1 11 + 无效,而是等于 2。有没有办法解决这个问题?
  • 在这种情况下,必须通过添加分隔参数/运算符的分隔符来更改后缀字符串的格式。否则 111- 可以解释为 11 1 - 或 1 11 -。然后可以在输入参数上使用另一个 Scanner 并用它检索参数/运算符。
猜你喜欢
  • 2012-08-29
  • 2015-07-17
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多