假设我有四个数字 A、B、C、D。
有四种数学方法可以通过中间的运算符来排列它们。对于我的示例,我将使用除法运算符,但运算符可以是任何东西。
((A/B)/C)/D
A/(B/(C/D))
(A/(B/C))/D
A/((B/C)/D)
(A/B)/(C/D)
如果数字为 1、2、3、4,则结果将分别为 0.0416、0.375、0.375、6、0.666。
如果字符串是
因此,如果我将 A、B、C 和 D 替换为任何数字,并将除法运算符替换为任何运算符,我该如何解析它才能给出正确的结果?
我这样做的方法是使用 switch 语句,并让哪个运算符位于某些字符串索引处,这有效,但仅适用于第一个,其中括号并不重要。我可以为五种不同组合中的每一种创建 5 种不同的解析方法,但似乎会有更好的方法,而且我的方法似乎会变得非常笨拙,因为我必须使用嵌套的 switch 语句。
例如,如果字符串是
012345678910
“A/((B/C)/D))
我会在 5 处的 char 处应用一个 switch 语句。然后对 B 和 C 进行操作,并将该变量存储到 X 中。然后在 char 8 处应用一个 switch 语句,应用于 D,存储在 Y 中,在 1 处切换,应用,打印结果。然后重复这 40 行代码 5 次,改变一些东西。
这是最好的方法还是有更好的方法?
谢谢!
最佳答案
这是一个经典问题。如果您注意到语言本身就实现了这一点。 您可能想阅读调车场算法 https://en.wikipedia.org/wiki/Shunting-yard_algorithm
关于java - 解析字符串 "((1/2)/3/)4"和其他类似字符串的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262453/