20155224 第十一周 课堂练习《计算后缀表达式的值》
代码实现
操作数和运算符的入栈与计算如下:
//如果是运算符,调用isOperator
if (isOperator(token)) {
op2=(stack.pop()).intValue();//从栈中弹出操作数2
op1=(stack.pop()).intValue();//从栈中弹出操作数1
result=evalSingleOp(token.charAt(0),op1,op2);//根据运算符和两个操作数调用evalSingleOp计算result;
stack.push(new Integer(result));//计算result入栈;
}
else {
//如果是操作数
stack.push(new Integer(Integer.parseInt(token)));// 操作数入栈;
}
}
return result;
}
检测到运算符后,将op1和op2出栈并进行运算。如果不是运算符,将数字入栈。
其他部分如蓝墨云上已给出部分。
检测
检测代码如下
public class MyDCTester {
public static void main(String[] args) {
String expression, again;
int result;
try {
Scanner in = new Scanner(System.in);
do {
MyDC evaluator = new MyDC();
System.out.println("Enter a valid postfix expression: ");
expression = in.nextLine();
result = evaluator.evaluate(expression);
System.out.println();
System.out.println("That expression equals " + result);
System.out.print("Evaluate another expression [Y/N]? ");
again = in.nextLine();
System.out.println();
} while (again.equalsIgnoreCase("y"));
} catch (Exception IOException) {
System.out.println("Input exception reported");
}
}
}
简单测试了加法、乘法的计算情况,和非法输入的情况。