我正在编写一个代码,将中缀转换为后缀以进行hw赋值。 我已经调试了它,但我似乎无法解决为什么当它从堆栈弹出时返回'('而不是'+'
StackInterface<Character> stack = new ArrayStack<Character>();
String postfix = "";
int length = infxEx.length();
for(int i =0; i != length; ++i){
char oneChar =infxEx.charAt(i);
if(oneChar == '('){
stack.push(oneChar);
}else
if(oneChar == '*' || oneChar == '/'|| oneChar == '%'|| oneChar == '+' || oneChar == '-'){
stack.push(oneChar);
//error checking input is int
}
else if(oneChar == ')'){
while (stack.pop() != '(' && !stack.empty()){
char popoff = stack.pop();
postfix = postfix + popoff;
}
}
谢谢!
答案 0 :(得分:0)
在处理到达)
的循环中,对于您检查的每个元素,从堆栈中弹出两次(首先在while条件下检查stack.pop() != '('
并再次在循环体内抓取popoff
,所以你将失去大约一半的角色;因为这是通过在主循环中达到)
来触发的,并且因为你忽略了任何不是操作员的事情(所以你的(a + b)
的堆栈将包含(+
,您在检查+
时会删除(
,这意味着您将(
添加到您的postfix中while
循环体,并在堆栈为空时终止循环。
使用peek操作查看堆栈顶部而不实际删除while循环条件中的值来解决该问题,如果在中缀表达式中接受除运算符之外的标记,则需要{{1处理该情况的子句。