package OO_Problems;
public class ArithmeticExpressionTree {
public interface AENode{
public double evaluate() throws EvaluationException;
}
public class AEValueNode implements AENode{
private double value;
public AEValueNode(double value){
this.value = value;
}
public double evaluate() throws EvaluationException{
return value;
}
}
public class AEBinaryOperatorNode implements AENode{
protected char operator;
protected AENode left, right; //might be operator node or value node, thus use the general node type here
public AEBinaryOperatorNode (char operator, AENode left, AENode right){
this.operator = operator;
this.left = left;
this.right = right;
}
public double evaluate() throws EvaluationException{
if(left!=null && right!=null){
switch (operator){
case '+':
return left.evaluate()+right.evaluate();
case '-':
return left.evaluate()-right.evaluate();
case '*':
return left.evaluate()*right.evaluate();
case '/':
return left.evaluate()/right.evaluate();
default: throw new EvaluationException("The operator is invalid");
}
}
throw new EvaluationException();
}
}
@SuppressWarnings("serial")
public class EvaluationException extends Exception
{
public EvaluationException()
{
System.out.println("This AE node is not a valid node");
}
public EvaluationException(String error){
System.out.println(error);
}
}
}
Design and code the data structure for AET. For example , "7+3*4-2" evaluates to 17 when simplified.
Design and code the data structure for AET. For example , "7+3*4-2" evaluates to 17 when simplified.
package OO_Problems;
import OO_Problems.ArithmeticExpressionTree.*;
public class AET_Tester {
public static void main(String[] args) throws Exception{
ArithmeticExpressionTree test = new ArithmeticExpressionTree();
AENode vn2 = test. new AEValueNode(2.0);
AENode vn7 = test. new AEValueNode(7.0);
AENode vn4 = test. new AEValueNode(4.0);
AENode vn3 = test. new AEValueNode(3.0);
AENode mn1 = test. new AEBinaryOperatorNode('*',vn4,vn3);
AENode an1 = test. new AEBinaryOperatorNode('+',vn7,mn1);
AENode sn1 = test. new AEBinaryOperatorNode('-',an1,vn2);
System.out.print(sn1.evaluate());
}
}
17.0