public Formula.Formula CalculateMulDiv(Formula.Formula data) { while (true) { try { Operator.OperatorCode[] MulDiv = new Operator.OperatorCode[2]; MulDiv[0] = Operator.OperatorCode.Mul; MulDiv[1] = Operator.OperatorCode.Div; int Index = FindFirst(data, MulDiv); Value value = Calculate.CalculateValue( data.GetData()[Index - 1].GetNumber(), data.GetData()[Index].GetNumber(), data.GetData()[Index].GetOperator_OperatorCode()); // i sets the first operator in + so Index will least be 1 data = DeleteIndexWriteValue(Index, value, data); } catch (Exception e) { return data; } } }
Formula.Formula DeleteIndexWriteValue(int Index, Value Value, Formula.Formula OldData) throws Exception { // ----------------prepare to create a new Formula.------------------------ char[] Operators = new char[OldData.GetData().length - 1]; // because Index is going to be delete, so we must - 1 Value[] Numbers = new Value[OldData.GetData().length - 1]; // so do the numbers. int Shift = 0; for (int i = 0; i != OldData.GetData().length - 1; ) { if (i == Index && Shift == 0) { Shift++; continue; } Operators[i] = OldData.GetData()[i + Shift].GetOperator_Char(); Numbers[i] = OldData.GetData()[i + Shift].GetNumber(); i++; } Numbers[Index - 1] = Value; return new Formula.Formula(Operators, Numbers); }
int FindFirst(Formula.Formula data, Operator.OperatorCode[] code) throws Exception { for (int i = 0; i != data.GetData().length; i++) { if (IsAny(code, data.GetData()[i].GetOperator_OperatorCode())) return i; } throw new Exception("Unable to find the code."); }