问题描述
所以我目前正在做一个将中缀转换为后缀表示法的项目,我几乎完成了这个项目。它正确地将中缀转换为后缀,直到我尝试添加括号它最终格式不正确。
static int precedence(String c){
switch(c){
case"+":
case"-":
return 1;
case"*":
case"/":
return 2;
default:
return -1;
}
}
我相信下一部分代码很好,因为没有括号,一切都可以正常工作。
// Precondition: every operator/operand will be separated by at least one space
public static String ConvertToPostfix(String infix) throws InvalidInfixEquationException
{
String[] tokens = infix.split("");
String result= " ";
Stack<String> stack= new Stack<>();
for(int i = 0; i<tokens.length; i++){
String current = tokens[i];
if(precedence(current)>0){
while(!stack.isEmpty() && precedence(stack.peek())>= precedence(current)){
result += stack.pop() + " ";
}
stack.push(current);
} else if(!stack.isEmpty()&& precedence(stack.peek())<= precedence(current)){
result += stack.pop() + " ";
}
我相信我遇到的问题是我的代码的下一部分涉及操作括号。
else if(current== ")"){
String s = stack.pop();
while(s !="("){
result += s;
s= stack.pop();
}
} else if(current == "("){
stack.push(current);
}
else {
result += current + " ";
}
}
for(int i=0;i <= stack.size(); i++){
result+= stack.pop() + " ";
}
return result;
}
这是我的主要方法,我已经包含了一个示例输出。 导入 java.util.Stack; 公共类 RPncalc {
public static void main( String[] args) throws InvalidInfixEquationException,InvalidPostfixEquationException {
String result= "(3+4)/3*2"; // output 3 4 + 3 / 2 *
System.out.println(ConvertToPostfix(result));
这是我得到的输出
( 3 4 ) 3 / 2 * +
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)