在Java打印OO表达式树

我工作的一个Java面向对象的表达式树任务,我需要能够在前缀/中缀/后缀格式评估和打印表达式树。 分配描述了一类层次结构静态类型“EXP”和几个一元和二元子类。

我通过让一元和二元类实现eval()方法(由根型“EXP”所指示的)解决了EVAL一部分,但需要在打印表达帮助。 我现在这个工作了几天,已经变得没有出路的。 所有我在网上找到的帮助是关于既有运营商和值字段(我的任务有以下两个不同的类)二进制类。 请给我一个正确的方向踢 - 我将不胜感激:-)

最良好的祝愿,拉斯穆斯

public interface Exp { double value(); } public class Value implements Exp { private double value; public Value(double val) { this.value = val; } public double value() { return this.value; } } public class Binary implements Exp { private char op; private Exp right; private Exp left; public Binary(char op, Exp left, Exp right) { this.op = op; this.left = left; this.right = right; } } public double value() { // sum up using recursion switch(this.op) { case '+': return this.left.value()+this.right.value(); case '-': return this.left.value()-this.right.value(); case '*': return this.left.value()*this.right.value(); case '/': return this.left.value()/this.right.value(); default: return Double.NaN; } } } public class Main { //calculating total ok - needs printing! public static void Main(String[] args) { Exp valLeft = new Value(10); Exp valRight = new Value(5); Exp bN1 = new Binary('+', valLeft, valRight); Exp bN2 = new Binary('+', bN1, new Value(3)); System.out.println(bN2.value()); } }

--------------解决方案-------------

以下是如何做中缀。 一旦你看到这个人是怎么做的前缀和后缀应该可以给你的。

Exp界面,添加:

String asInfix();

Binary类中,添加:

public final String asInfix() {
return "(" + left.asInfix() + " " + op + " " + right.asInfix() + ")";
}

Value类中,添加:

public final String asInfix() {
return "" + value;
}

现在你可以做System.out.println(bN2.asInfix());显示((10.0 + 5.0) + 3.0)

接近它以同样的方式。 覆盖toString ,使其调用递归的leftright的情况下Binary ,并返回值Value的节点。

分类:java的 时间:2012-05-02 人气:0
本文关键词: java的,树,表达,递归
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.452 (s). 9 q(s)