Я работаю над java объектно-ориентированным назначением дерева выражений, где мне нужно иметь возможность оценивать и печатать деревья выражений в форматах prefix / infix / postfix. Назначение описывает иерархию классов со статическим типом «Exp» и несколькими унарными и двоичными подклассами.
Я решил часть eval с помощью унарного и двоичного классов, реализующего метод eval () (в соответствии с корневым типом "Exp"), но мне нужна помощь с печатью выражения. Я работал с этим уже несколько дней и никуда не попал. Вся помощь, которую я нашел в Интернете, связана с бинарными классами, в которых есть поля оператора и значения (в моем назначении они представлены как два разных класса). Пожалуйста, дайте мне удар в правильном направлении - я буду очень признателен: -)
С наилучшими пожеланиями,
Rasmus
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());
}
}