1

我需要将我作为字符串存储在资源 xml 中的正方形周长 (4*a) 之类的公式分配给我的活动中的一个值。所以,它应该看起来像:

活动:

int a = (formula from xml)

和 XML:

<resources>

<string name="square_perimeter">4*a</string>

</resources>

有没有办法做到这一点?

4

1 回答 1

-1

是什么[34 20 2A 20 31 36]

这是计算机遇到字符串时会看到的内容"4 * 16"。就像你一样,当只给它时,它不知道为什么那些神秘的数字应该等于 64。

因此,要真正评估这一点,计算机/算法将从将输入分成块开始。假设您的表达式必须用空格分隔(4*4是非法的,4 * 4没关系)。基于这些知识,我们可以将表达式拆分为[34], [2A], [31 36]

  • [34]代表4数字的字符=>该部分表示4
  • [2A]代表作为*数学运算符的字符 => 我们需要将这之前的部分与之后的部分相乘。
  • [31 36]代表1and 6,两者都是数字。=> 计算 1 * 10 + 6 => 是 16。

我们知道此时必须进行乘法运算,并且我们有 4 和 16,因此可以计算 4*16 并得到结果。

如果您只需要遵循严格规则的非常简单的公式,例如只有“[numbers] [*/+-] [numbers]”,那么为此编写一个小型解析器非常简单。

但是数学很快就会变得复杂,并且“10 + 5 * 2”已经要求如果您从左到右进行评估,则不要添加 10 + 5,因为这将是错误的结果。

因此,使用类似变量评估复杂表达式需要编写的代码量"5a^2 * sin(a) +1"相当大。它需要涵盖所有数学规则和所有特殊情况。


回到你的问题:如果你真的想使用文本公式,寻找一个可以为你做丑陋东西的库。例如,评估以字符串形式给出的数学表达式会提到一些。

如果您不需要将公式作为文本,您可以这样做:

您将方法名称放在 xml 数据库中,并在您的应用程序中实现该方法的解决方案。用户通过名称选择方法,然后您根据该名称调用正确的方法。缺点是必须知道所有公式,以便您可以编写一段代码来解决它。

非常基本的例子:

public int calculate(String method, int value1, int value2) {
    if ("square".equals(method)) {
        return value1 * value1;
    } else if ("add".equals(method)) {
        return value1 + value2;
    } else if ("substract".equals(method)) {
        return value1 - value2;
    } else {
        return 0;
    }
}

公式中使用的值也需要在某个地方出现,我不知道您打算如何做到这一点。

于 2012-11-22T18:55:36.700 回答