![]() |
1
7
一旦开始使用switch语句,正确的返回将非常好
此解决方案在使用中类似于以下内容(sans
但我会选择其他人广泛测试和使用的解析器。 |
![]() |
2
15
我不确定你是否认为这很优雅,但有一种方法:
然后你可以替换你的
|
![]() |
3
5
要调用此类代码,您可以执行以下操作:
然后可以创建字符串到操作的映射,如下所示:
此外,所有操作都有一个集中的位置,唯一的缺点是Operation.java文件可能会随着一组足够大的操作符而变大。 唯一可能长期存在的问题是,虽然这样一个系统很有用,也很容易阅读和理解,但它确实没有考虑到优先级。假设你的公式都是按优先顺序计算的,这样的问题无关紧要。按照优先顺序表示公式的例子可以在反向波兰符号、波兰符号等中找到。
根据典型的惯例,5*2应该在4+5之前计算。处理优先级的唯一正确方法是在内存中形成一个计算树,或者保证所有输入都以简单、明确的方式处理优先级(波兰表示法、反向波兰表示法等)。 我假设您知道优先级问题,但是感谢您让我提到它,这是为了那些还没有编写此类代码的人。 |
![]() |
4
3
|
![]() |
5
2
除非您有一个大的运算符集,或者希望将来能够允许使用更复杂的表达式,否则就不必了。
您可以用Java编写,但是由于缺少简洁的映射文本和匿名类声明,所以要详细得多。
|
![]() |
6
2
对于这种类型的场景,枚举是干净的。
另一个选择是包含一个静态方法,该方法接受运算符和操作数的字符串表示形式,并具有单个方法调用,尽管我更喜欢将它们分开。 |
![]() |
7
1
您可以使用JSR-223解释性语言,比如BeanShell,让它执行操作,然后返回结果。 |
![]() |
8
1
也可以使用操作符的hashCode并将其放在
如果您不经常添加运算符(我认为您不会这样做),这可能会起作用 所以这就足够了:
并拥有
下面是完整的运行示例代码:
就这样。运行速度非常快(我很确定枚举是有序的) 从面向对象的角度来看,我认为Rahul的答案是可以的,但是如果你想认真对待这个问题,你应该像Hank Gay建议的那样使用解析器。 附笔 获取字符串的哈希代码很容易:
实际上我用了这个:
|
![]() |
9
1
用c语言很容易做到。
测试:
|
![]() |
10
0
@Robin:在Java中,非抽象类中不能有抽象方法,枚举类型也不能是抽象的(因为所有的枚举类型都继承自枚举,这意味着一个枚举类型不能通过Java的继承规则继承自另一个枚举类型) 另外,您可以添加一个名为register的静态方法:
然后在构造函数中调用该方法;并在getOperator()方法中使用map lookup。 |