Advertisements
Hi, so I need to make a program that "works like a calculator". I need to make two versions:
1) I'm given the Expression Class and need to implement the children classes, which are Number, Product, Sum, Quotient, Difference, and Modulus. The five types of binary operation expressions will each have two (sub) expressions, a left hand side and a right hand side (or in the case of a quotient a numerator and a denominator). Thus each binary operation class will have a constructor that takes two other Expression objects as arguments.
Numbers on the other hand will only store a single double. Thus their only constructor will take a double.
All expressions know how to answer two messages: the toString() method which will provide a String representation of the expression the object represents. On the other hand, the evaluateMe() method will cause the expression to compute its value and return it (as a double). There is only one twist to this, and that is the toString() of numbers should only print out to two decimal places (using a java.text.DecimalFormat object). To give you some idea of what is required, consider the following code:
Sum s1 = new Sum(new Number(7.123456789), new Number(11.3344)); Sum s2 = new Sum(s1, new Product(s1, new Number(3))); System.out.println("s2 = " + s2 + " with value " + s2.evaluateMe()); This should, when executed print out:
s2 = ((7.12 + 11.33) + ((7.12 + 11.33) * 3)) with value 73.831427156 The toString() method should hold no surprises really, except that in the Number version you'll have to format the return value a bit. But check out either the solutions to the first assignment or the description of the first project. The evaluateMe() method is also not very complex. In the Number case it should just return the stored value, while in the Sum case it will just ask its two subexpressions to evaluate themselves, and then return the resulting sum of those doubles.
2) The new intermediate class BinaryOperation does most/all of the work. Now define the classes Sum, Product, Quotient, Difference and Modulus as subclasses of BinaryOperation. They should be much much simpler.
The starter code for Expression is:
public abstract class Expression { public abstract String toString(); public abstract double evaluateMe(); }
The class BinaryOperation is:
public abstract class BinaryOperation extends Expression{ private Expression lhs; private Expression rhs; private char binaryOperation; public String toString(){ return "(" + lhs.toString() + " " + binaryOperation + " " + rhs.toString() + ")"; }; public double evaluateMe(){ return myOperation(lhs.evaluateMe(), rhs.evaluateMe()); }; protected abstract double myOperation(double d1, double d2); BinaryOperation(Expression e1, Expression e2, char op){ lhs = e1; rhs = e2; binaryOperation = op; } }
THANKS IN ADVANCE!