java – 在以下情况下,if-else树是最好的方法吗?
我在做什么:
我正在用Java创建一个简单的计算器,它读取一个使用postfix notation编写的字符串(例如:3 4).然后它接受字符串并从左到右开始读取它.它存储它找到的每个数字,然后应用以下运算符.例如:3 4 – >存储3,存储4,运行3 4并存储结果. 我需要帮助的是: 应该以什么方式检查字符与预定义的运算符(if(c ==’/’)等).在我的情况下,对于if-else树有哪些替代方案,如果我希望能够以最小的努力添加新的运算符(以及最低的性能损失),我应该选择哪一个.什么通常被认为是良好的做法? 解决方法
如果将操作封装为对象,则通常可以使用数据结构替换类似开关的语句,并希望将来只添加操作.
例如,这是将操作封装为对象的一种方法:使用Enum来表示操作: http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.html public enum Operation { PLUS { double eval(double x,double y) { return x + y; } },MINUS { double eval(double x,double y) { return x - y; } },TIMES { double eval(double x,double y) { return x * y; } },DIVIDE { double eval(double x,double y) { return x / y; } }; // Do arithmetic op represented by this constant abstract double eval(double x,double y); } 您可以扩展此示例以将符号与每个操作相关联,并提供静态方法以查找与符号关联的操作. [[我对这个混合的UI /视图代码与逻辑/域代码撕裂,但你提到你想要简单,所以也许这对你的程序是好的.]] 如果将操作封装为对象,则可以考虑使用数据结构来替换类似交换的代码: >如果会有很多操作,请考虑构建一个hashmap以将符号映射到操作.>如果存在少量操作,则可能足够便宜以具有所有操作的集合并且简单地遍历所有操作以询问每个操作是否它们对用户提供的符号起作用并使用第一个找到的操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |