尝试将中缀转换为后缀返回向后输出
Posted
技术标签:
【中文标题】尝试将中缀转换为后缀返回向后输出【英文标题】:Trying to convert infix to postfix returns backwards output 【发布时间】:2019-03-15 01:58:43 【问题描述】:我正在创建一个将中缀表达式转换为后缀表达式的逆波兰表示法计算器。但是,我的运营商正在向后输出。例如,我输入的中缀为“1+5*(3*2)”,当我运行程序时,我得到输出“+ 1 * * 3 2 5”,而它应该是“1 5 3 2 + * +" 我不知道为什么。
public class RPNcalc extends Stack
public static void main( String[] args)
String infix = "1+5*(3*2)";
RPNcalc test = new RPNcalc();
String output = test.ConvertToPostfix(infix);
System.out.println(output);
public static String ConvertToPostfix(String infix)
Stack stack1 = new Stack();
char ch;
String postfix = "";
for (int i = 0; i < infix.length(); i++)
ch = infix.charAt(i);
if (isOperator(ch))
postfix = postfix + ch + " ";
else if (ch == '(')
stack1.push(ch);
else if (ch == ')')
while (stack1.peek() != '(')
postfix = postfix + stack1.pop() + " ";
stack1.pop();
else
while (!stack1.isEmpty() && !(stack1.peek() == '(') && (precedence(ch) <= precedence(stack1.peek())))
postfix = postfix + stack1.pop() + " ";
stack1.push(ch);
while (!stack1.isEmpty())
postfix = postfix + stack1.pop();
return postfix;
【问题讨论】:
【参考方案1】:只有一个“!”缺失:
必须是:if( ! isOperator( ch ) ) …
并且输出是正确的:
1 5 3 2 * * +
计算为 31
*和+之间的间距有问题postfix + ' ' + stack1.pop()
?
调车场算法的一个很好的描述在这里找到:https://en.wikipedia.org/wiki/Shunting-yard_algorithm#Detailed_example
顺便说一句,在 Java 中,函数名应该以小写字母开头:convertToPostfix( String infix )
【讨论】:
以上是关于尝试将中缀转换为后缀返回向后输出的主要内容,如果未能解决你的问题,请参考以下文章