我工作的一個Java面向對象的表達式樹分派,我需要能夠在前綴/中綴/後綴格式,評估和打印表達式樹。該分配描述了一個靜態類型爲「Exp」的類層次結構以及多個一元和二元子類。打印OO表達式樹在Java中
我已經通過具有一元和二元類實現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());
}
}
奇妙(!):-)請問爲什麼你聲明方法是最終的? – Rasmus 2011-04-19 22:51:08
..以避免任何重寫的子類當然;-) – Rasmus 2011-04-19 23:05:56
這只是一個習慣,因爲我通常不做任何子類化。隨意忽略它。 – Olathe 2011-04-19 23:08:09