2013-04-25 75 views
-1

我试图使一个计算器,从一个字符串采用输入,使用多个参数。使用用户输入的动态计算器?

示例: 用户类型的:14 + 20 * 8

然后,它会做数学和返回的变量。

我看到类似这样的东西,但代码对我来说太过先进了,而且它并不是我想要的东西。我查看了其他问题,他们似乎没有得到这个先进的。

我正在考虑使用一个字符串生成器,然后将每个参数分解为一个变量,然后以这种方式进行数学运算,但我不太确定该怎么做。

+0

你真的写了任何代码吗? – 2013-04-25 02:50:07

+0

谷歌解析:几个链接:http://www.smccd.net/accounts/hasson/C++2Notes/ArithmeticParsing.html(C++,但一些不错的伪代码),http://www.codeproject.com/文章/ 88435 /简单指南到数学表达式解析(c#,但应该可翻译为java) – mcalex 2013-04-25 02:50:31

+0

@MichaelPerrenoud 我有,但我钩入这个游戏称为我的世界,我不知道如果在这里发布我的bukkit代码会很好。另外它在我的另一台电脑上。 – 2013-04-25 02:56:47

回答

1

一个聪明的方法是使用recursive descent parser。对于更简单的事情,您可以禁止使用括号并要求用户用空格分隔每个令牌(因此14 + 20很好,但不允许14 + 20),然后使用String#split(“”)来分隔令牌。如果令牌的第一个字符是数字,则使用Integer.parseInt(str)将其转换为int;如果你得到一个NumberFormatException那么这可能是因为用户没有包含空格(并且你试图将“14 + 20”变成一个整数)

+0

虽然这可能会打破表达的文物 - 它不会管理PEMDAS规则的复杂性。这个问题**比这复杂得多。** – 2013-04-25 02:53:38

+0

他**应该使用递归下降解析器,该解析器在管理PEDMAS方面做得很好,但是从他的问题来看,这听起来像是他宁愿使用rinky无论出于何种原因,均可使用解析器。 – 2013-04-25 02:55:31