OOD - Arithmetic Expression Tree

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值