I need to assign a formula like square perimeter (4*a) which i have stored in resource xml as string, to a value in my activity. So, it should look like:
Activity:
int a = (formula from xml)
And XML:
<resources>
<string name="square_perimeter">4*a</string>
</resources>
Is there a way how to do that ?
What is
[34 20 2A 20 31 36]?It is what a computer will see when it encounters the string
"4 * 16". And just like you, when given only that, it does not know why those cryptic numbers should be equivalent to 64.So to really evaluate that, a computer / the algorithm would start by separating the input into chunks. Let’s assume your expression must be separated by whitespace (
4*4is illegal,4 * 4is okay). Based on that knowledge we can split the expression into[34],[2A],[31 36].[34]stands for the character4which is a number => that part means 4[2A]stands for the character*which is a mathematical operator => we need to multiply the part before this with the part after this.[31 36]stands for1and6, both are numbers. => calculate 1 * 10 + 6 => it’s a 16.We know at that point that a multiplication has to be done and that we have 4 and 16, so 4*16 can be calculated and we have the result.
If you just need very simple formulas that follow strict rules, like only “[numbers] [*/+-] [numbers]” then writing a small parser for that is quite simple.
But math gets complex pretty quickly and already “10 + 5 * 2” requires that you don’t add 10 + 5 if you evaluate from left to right because it would be the wrong result.
The amount of code one needs to write to evaluate complex expression with variables like
"5a^2 * sin(a) +1"is pretty big therefore. It needs to cover all the mathematical rules and all the special cases.Back to your problem: If you really want to use text formulas, look for a library that can do the ugly stuff for you. Evaluating a math expression given in string form for example mentions some.
If you don’t need to have the formula as text you could maybe do it like this:
You put names for methods in the xml database and implement the solution for that method in your app. The user selects a method by it’s name and you call the right method based on that name. The disadvantage is that all your formulas must be known so you can write a piece of code that can solve it.
Very basic example:
The values used in the formula need to come somewhere too, I don’t know how you plan to do that.