我被分配了一个作业问题,即将infix表达式转换为后缀表达式,然后评估后缀。
我的代码可根据给定的表达式将中缀转换为后缀,即((((1 + 2)-(3-4))/(6-5))中缀变为1 2 + 3 4--6 5-/
和2 * 4-2 ^ 2 ^ 1变成2 4 * 2 2 1 ^ ^-这在我的程序中有效
public class PostfixEvaluator {
PostfixEvaluator(){
//empty initializer
}
MyStack stack1 = new MyStack();
public int evaluate(String s){
//s = s.replaceAll("\\s", "");//error handling by getting rid of whitespaces
for(int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if(Character.isDigit(ch)) {
stack1.push(Integer.parseInt(String.valueOf(ch)));//can only put int's in otherwise it'll
//crash when we cast the return later
}
else {
int right = (int)stack1.pop();
int left = (int)stack1.pop();
switch(ch) {
case '+':
stack1.push((int)(left+right));
break;
case '-':
stack1.push((int)(left-right));
break;
case '*':
stack1.push((int)(left*right));
break;
case '/':
stack1.push((int)(left/right));
break;
case '^':
stack1.push((int)(left^right));
break;
}//switch
}//else
}//for loop
return (int)stack1.pop();
}//evaluate
}//class
给出的两个后缀表达式的输出应为4
1 2 + 3 4--6 5-/此后缀的计算结果为4
2 4 * 2 2 1 ^ ^-此后缀在我的程序中计算为7 我试图弄清楚为什么第二个不起作用