这个例子由于是算法题。所以注释我也没法加得太多。关于代码的清晰度,我得道歉。因为原始项目里对计算后则表达式的类的命名有误。而我也没时间更改。所以只是在把代码发上来时临时改了一下。有的地方显得不太谐调。还请大家凑合着看一下。主要是这个 Demo 能告诉大家写表达式计算相关的题的方法。那就是后则表达式为核心,定义好运算符和优先级表。不管是用面向对象的方法(如职责链)还是面向对过程的方法(如本题),这都是一个基本的思想。当然本题用树解析完全可以。但是用本题中的算法可以一次到位,所以为什么还给自己找麻烦呢。

在了解本题的方法后,可以很容易地添加新的一元二元运算符。只需要定义好相应的运算函数,优先级,并把它们插入到各自的表中就好了。如果要添加三元及更多元的运算符,那么请自己试着改一下 Computer 的 Compute 方法就可以了。