public class Func { enum OP_TYPE{ VALUE, ADDITION, SUBTRACTION, MULTIPLICATION, DIVISION } OP_TYPE op; Func left; Func right; float value; public Func(OP_TYPE op, Func left, Func right){ this.op = op; this.left = left; this.right = right; } public Func(float value){ this.op = OP_TYPE.VALUE; this.value = value; } public static Func createFunc(String formula){ Func func = null; for(int i = formula.length() - 1; i > 0; i--){ if(formula.charAt(i) == '+'){ System.out.println("Create addition: " + formula); String a = formula.substring(0, i); //5 String b = formula.substring(i + 1, formula.length()); //4 func = new Func(Func.OP_TYPE.ADDITION, a, b); return func; } else if(formula.charAt(i) == '-'){ System.out.println("Create subtraction: " + formula); String a = formula.substring(0, i); //5 String b = formula.substring(i + 1, formula.length()); //4 func = new Func(OP_TYPE.SUBTRACTION, a, b); return func; } } System.out.println("Create value: " + formula); float value = Float.parseFloat(formula); func = new Func(value); return func; } public void printONP(){ if(op == OP_TYPE.VALUE){ System.out.print(value); }else { System.out.print(opToText()); left.printONP(); right.printONP(); } } String opToText(){ switch(op){ case ADDITION: return "+"; case SUBTRACTION: return "-"; } return "?"; } public Func(OP_TYPE op, String left, String right){ this.op = op; this.left = createFunc(left); this.right = createFunc(right); } public float calc(){ if(op == OP_TYPE.ADDITION){ return left.calc() + right.calc(); }else if(op == OP_TYPE.SUBTRACTION){ return left.calc() - right.calc(); }else if(op == OP_TYPE.VALUE){ return value; } return 0.0f; } }