public void SetValue(int goal, bool presetFormat = false) { int left, right; while (!SplitHelper.SplitValue(goal, Operator.ToString().ToCharArray()[0], out left, out right, presetFormat)) { ; } Left.SetValue(left, presetFormat); Right.SetValue(right, presetFormat); }
/// <summary> /// Instantiate a new operator node and make sure that its value is as specified /// and the tree rooted at this node has the specified number of operand nodes. /// </summary> /// <param name="goal"></param> /// <param name="numberOfNewNodes"></param> public OperatorNode(int goal, int numberOfNewNodes = 2) { int left, right; char op; // Choose a random valid operator for this node and split the goal do { op = Tree.operators.GetRandomElement(); } while (!SplitHelper.SplitValue(goal, op, out left, out right)); Operator = new Operator(op); Left = new OperandNode(left); Right = new OperandNode(right); int toLeft, toRight; // Distribute the number of new operands to be made between the two sides SplitHelper.SplitNumberOfOperands(left, right, numberOfNewNodes, out toLeft, out toRight); Left = Left.Expand(toLeft); Right = Right.Expand(toRight); }