This week's book giveaways are in the Refactoring and Agile forums.We're giving away four copies each of Re-engineering Legacy Software and Docker in Action and have the authors on-line!See this thread and this one for details.
Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Cloud/Virtualization forum!

# Equation and the corresponding result

Ranch Hand
Posts: 88
Hi
Assume that i have two variables

int x1 = 5
int x2 = 10;
and i want to get the result of x1+x2 and store the value in one more int variable x3.So basically i would have
int x3 = x1+x2;
But the problem is the equation x1+x2 or x1*x2 or x1/x2 etc is known to the program only at run time that is the user enters that input.
How do i do this in java like change the equation of x3 based on the user input.Any kind of help would be greatly appreciated.Thanks.
Surya

Rob Ross
Bartender
Posts: 2205
You will have to build your own parser, which can take an input string like "5+10" or "6*3", and parse each token, obtaining operands and operators, then apply semantic logic to process those operators and operands - you're basically building a mini-grammar.
If your input strings are very simple, you can just hack something together using a StringTokenizer, looking for a number followed by a math symbol (+,-,/,*) and then another number; if you use an int code to signify the operator then you can write a switch statment to do the actual calculation. For example, say you can parse out the numbers 5 and 10, and the operator "+". Then your logic would be:
int op1 = getOp1(); //5
int op2 = getOp2(); //10
int operator = getOperator(); //let 1 = "+"
int result;
switch(operator){
case 1: result = op1 + op2;
case 2: result = op1 - op2;
case 3: result = op1 * op2;
case 4: result = op1 / op2;
}
For more complicated input strings, you'll have to read up on compiler/parser theory and build your own grammar. There's a book called "Building a parser in java" that might help you.
Good luck!
[ March 10, 2002: Message edited by: Rob Ross ]
[ March 10, 2002: Message edited by: Rob Ross ]

Ranch Hand
Posts: 88
Hi Rob
Thanks a lot for the input it was really useful,but i think i need to indeed write some parser.Let's see how it works out.
Surya

Michael Yuan
author
Ranch Hand
Posts: 1427
I think you could use some dynamic code generation. Have a look at my friend Norman's article on this issue's JDJ:
http://www.sys-con.com/java/articleprint.cfm?id=1307

 Consider Paul's rocket mass heater.